通用编译器独立的方式在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*/) { ... }
通用方法不是打开警告选项,垃圾邮件警告清晰正确的代码。 在其分析中包含函数参数的任何“未使用的变量”警告选项都是错误的 ,应该保持不变。 不要用丑陋的方式乱丢你的代码来安静破碎的编译器。
您也可以尝试向编译维护者/供应商发送错误报告。