遇到以下宏时,我正在尝试从旧版代码中删除警告
#define DISBALE_DEBUG
#ifdef DISBALE_DEBUG
#define Dbg(fmt,...) (0)
#else
#define Dbg print
#endif
并在以下代码中使用:#ifdef __arm__
Dbg("\n %s %s %d %d \n", __FILE__, __FUNCTION__, __LINE__, mode);
#endif
为此,我得到警告:**表达式无效**
最佳答案
如果输入DISBALE_DEBUG
#ifdef
分支,则Dbg
宏将定义为a variadic macro,它仅使用其可变参数,而对它们不执行任何操作。即,例如
Dbg("\n %s %s %d %d \n", __FILE__, __FUNCTION__, __LINE__, mode);
将解决(0);
正如编译器准确警告您的那样,该命令无效。另一方面,如果您进入
#else
分支,则Dbg
宏将被预处理器替换为print
,这意味着 Dbg("\n %s %s %d %d \n", __FILE__, __FUNCTION__, __LINE__, mode);
决心print("\n %s %s %d %d \n", __FILE__, __FUNCTION__, __LINE__, mode);
现在,根据您问题中的信息,目前尚不清楚is not a standard function in C++ nor C将解决什么print(...)
。可能是另一个可变参数宏或variadic function。
关于c++ - #define Dbg(fmt,…)(0)是什么意思?警告:表情无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62591472/