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

时间:2011-01-31 12:52:14

标签: c++ c macros compiler-warnings

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

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

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

3 个答案:

答案 0 :(得分:32)

根据this answer user GMan {em>典型方式转换为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))

答案 1 :(得分:1)

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

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

答案 2 :(得分:-2)

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

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