(void)0:不能分配给变量@H_502_3@
static int foo(const char * bar){return 0; }:在某些模块中导致未使用的静态函数警告@H_502_3@
static inline int foo(const char * bar){return 0; }:仅适用于C99编译器@H_502_3@
谢谢你的帮助!@H_502_3@
EDIT1:
它有点像跟踪宏,并在整个项目中使用.大多数情况下,它只是用作FOO(“函数x调用”)的语句;但在少数情况下,我看到了(FOO(“条件a”)){/ *更多调试输出* /}.在NDEBUG定义和优化的情况下,FOO不应该留下任何东西.我没有拿出这个,但我必须清理这个烂摊子:).@H_502_3@
edit2:我应该补充说,对于gcc发布版本,使用了这些标志:-O3 -Wall -ansi@H_502_3@
edit3:现在我要用__inline int dummy(){return 0; }. __inline在ansi模式下与VisualC和GCC一起使用.@H_502_3@
解决方法
#ifndef NDEBUG #define FOO(arg) foo(arg) #else #define FOO(arg) ((int)0) #endif
它可以防止“表达无效”警告,它什么都不做,使用时它的值仍为0.@H_502_3@
EDITED
它似乎不那么便携,所以(现在)你有这些条件:@H_502_3@
>(0)或((int)0)至少在VC 2010上工作.
> __noop应该适用于2003年之后的任何版本的VC.@H_502_3@
VC6不是问题,因为它根本不发出C4555警告.对于其他编译器,您可以使用:@H_502_3@
>((void)0,0)它可能适用于很多编译器(可能是更便携的编译器?).
> inline int foo(const char * bar){return 0;适用于任何其他C99编译器(如您所写,您可能需要在gcc上将其声明为静态).@H_502_3@