#define Dbg(fmt,...) (0) 是什么意思?警告:表达式无效
What does #define Dbg(fmt,...) (0) mean? warning: expression has no effect
当我遇到以下宏时,我正在努力从遗留代码中删除警告
#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);
现在,鉴于您问题中的信息,尚不清楚 print(...)
将解决什么问题,因为它 is not a standard function in C++ nor C. It's likely another variadic macro or a variadic function。
当我遇到以下宏时,我正在努力从遗留代码中删除警告
#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);
现在,鉴于您问题中的信息,尚不清楚 print(...)
将解决什么问题,因为它 is not a standard function in C++ nor C. It's likely another variadic macro or a variadic function。