C++ 如何定义在C+中扩展为条件语句的宏+;?

C++ 如何定义在C+中扩展为条件语句的宏+;?,c++,qt,macros,C++,Qt,Macros,我想创建一些上下文相关的宏。宏 #define LOG_WARNING(x) qWarning()().noquote().nospace() << x 由于宏将依赖于单元测试,因此我在相同的宏.h extern bool UNIT_TESTING; // Whether in course of unit testing 然而,编译器告诉我们 declaration does not declare anything [-fpermissive] extern bool

我想创建一些上下文相关的宏。宏

 #define LOG_WARNING(x) qWarning()().noquote().nospace() << x
由于宏将依赖于
单元测试
,因此我在相同的
宏.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
的文件中声明了external,则可以正常工作。我做错什么了吗?

是如何在源文件之间共享变量。尽管如此,我强烈建议不要这样做,而是实现一个函数(bool IS_UNIT_TESTING())或类来处理这个问题。通过这种方式,您可以在不更改接口的情况下更改实现

而且,。它们容易出错,无法轻松调试。改用内联函数或constexp。编译器会将其优化为几乎相同的代码

是如何跨源文件共享变量。尽管如此,我强烈建议不要这样做,而是实现一个函数(bool IS_UNIT_TESTING())或类来处理这个问题。通过这种方式,您可以在不更改接口的情况下更改实现


而且,。它们容易出错,无法轻松调试。改用内联函数或constexp。编译器会将其优化为几乎相同的代码

您是否在
extern“C”
块中?
UNIT\u TESTING
是一个宏吗?这当然不是一个条件宏。它是一个扩展为条件语句的无条件宏。是否确实要使用宏?日志类更为防弹,您可以在何时打印和何时不打印上为该类提供一个属性。@NathanOliver好吧,我更喜欢编译时解决方案,@Jarod42 UNIT_TESTING是一个简单的bool,而不是在extern“C”中。您在
extern“C”
块中吗?
UNIT\u TESTING
是一个宏吗?这当然不是一个条件宏。它是一个扩展为条件语句的无条件宏。是否确实要使用宏?日志类更加防弹,您可以在何时打印和何时不打印上为该类提供属性。@NathanOliver好吧,我更喜欢编译时解决方案,@Jarod42 UNIT_TESTING是一个简单的bool,而不是在extern“C”中
declaration does not declare anything [-fpermissive]
 extern bool UNIT_TESTING; // Whether in course of unit testing
        ^