【发布时间】:2017-08-25 12:01:06
【问题描述】:
我想创建一些上下文相关的宏。宏
#define LOG_WARNING(x) qWarning()().noquote().nospace() << x
工作正常,它位于文件Macros.h。我想定义一个宏,它在从单元测试例程调用时不打印日志消息。所以,我修改像
#define LOG_INFO(x) if(!UNIT_TESTING) qInfo().noquote().nospace() << x
由于这种方式宏将依赖于UNIT_TESTING,所以我提供了相同的Macros.h
extern bool UNIT_TESTING; // Whether in course of unit testing
然而,编译器告诉
declaration does not declare anything [-fpermissive]
extern bool UNIT_TESTING; // Whether in course of unit testing
^
同时,如果在包含Macros.h 的文件中声明了外部,则它可以正常工作。我有什么不对吗?
【问题讨论】:
-
您在
extern "C"块中吗?UNIT_TESTING是宏吗? -
这当然不是条件宏。它是一个扩展为条件语句的无条件宏。
-
您确定要使用宏吗?日志记录类更加防弹,您可以为该类提供何时打印和何时不打印的属性。
-
@NathanOliver 好吧,我更喜欢编译时解决方案,
-
@Jarod42 UNIT_TESTING 是一个简单的布尔值,而不是 extern "C"