我想创建一些上下文相关的宏。宏
#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
的文件中声明了外部,则它可以正常工作。我错了什么?
答案 0 :(得分:2)
Here是如何跨源文件共享变量。尽管如此,我强烈建议不要这样做,而是要实现一个函数(bool IS_UNIT_TESTING())或类来处理这个问题。通过这种方式,您可以在不更改界面的情况下更改实现。
此外,Macros are evil。它们容易出错,不容易被忽略。请改用内联函数或constexp。编译器会将它优化为几乎相同的代码。