通用编译器独立的方式在C / C ++中实现UNUSED宏

在实现存根等时,您希望避免使用“未使用的变量”警告。 多年来,我遇到过UNUSED()宏的一些替代方案,但从来没有一个被certificate适用于“所有”编译器,或者标准是气密的。

或者我们是否坚持使用每个构建平台的#ifdef块?

编辑:由于非c兼容替代品的答案很多,我想澄清我正在寻找一个对C和C ++,所有口味等都有效的定义。

根据用户GMan的回答 , 典型的方法是转换为void

 #define UNUSED(x) (void)(x) 

但是如果x被标记为volatile会强制从变量中读取并因此产生副作用,那么几乎保证无操作并抑制编译器警告的实际方法如下:

 // use expression as sub-expression, // then make type of full expression int, discard result #define UNUSED(x) (void)(sizeof((x), 0)) 

在C ++中,只需注释掉名称。

 void MyFunction(int /* name_of_arg1 */, float /* name_of_arg2*/) { ... } 

通用方法不是打开警告选项,垃圾邮件警告清晰正确的代码。 在其分析中包含函数参数的任何“未使用的变量”警告选项都是错误的 ,应该保持不变。 不要用丑陋的方式乱丢你的代码来安静破碎的编译器。

您也可以尝试向编译维护者/供应商发送错误报告。