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
^