在C / C ++中实现UNUSED宏的通用编译器独立方式
在实施存根等时,您希望避免“未使用的变量”警告。 我在过去几年中遇到过一些UNUSED()宏的替代方案,但从来没有一个方法被证明适用于“全部”编译器,或者是标准的密封编译器。
或者我们坚持每个构建平台都使用#ifdef块?
编辑:由于一些答案与非C兼容的替代品,我想澄清,我正在寻找一个定义,这是一个有效的C和C + +,所有的味道等。
根据此答案由用户GMAN典型的方式是强制转换为void
:
#define UNUSED(x) (void)(x)
但是如果x
被标记为volatile
并强制从变量读取并因此产生副作用,那么几乎保证no-op并禁止编译器警告的实际方法如下:
// 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*/)
{
...
}
通用的方法是不打开警告选项,发送垃圾邮件警告以获得清晰正确的代码。 在分析中包含函数参数的任何“未使用的变量”警告选项都是错误的,应该放弃。 不要乱抛垃圾代码来清理编译器。
您也可以尝试向编译器维护者/供应商发送错误报告。
链接地址: http://www.djcxy.com/p/73609.html上一篇: Universally compiler independent way of implementing an UNUSED macro in C/C++