为什么在c++函数中使用void(未使用)(和类似的)而不是没有名称的参数来消除未使用变量的警告

Why to use void(unused) (and similar) instead of no-name parameter to silence unused-variables warnings in C++ function?

本文关键字:未使用 有名称 变量 警告 参数 函数 c++ 为什么 void      更新时间:2023-10-16

所以我知道在c++中将变量标记为未使用的两种方法:

第一个(在函数体中)

void func1(int i, int unused) {
  (void)unused; //marking 'unused' here
  i++;
}

和相似导线

第二个(在函数的参数列表中)

void func2(int i, int /* marking 'unused' here */ ) {
  i++;
}

在我看来,第二个更好,因为它:

  1. 通知函数声明中未使用的变量(不需要)
  2. 使得不可能实际使用这个变量
  3. 使代码更清晰(这是主观的)

另外,为这两个函数生成的汇编代码是相等的(用gcc 4.9.2测试),所以这也不是关于性能折衷的问题。

鉴于此,我的问题是:为什么使用第一个如此普遍?

如果使用c++,则允许使用Second。如果你有一些C遗留:第二个实际上是非法的。

代码:

int foo(int) {
    int i=0;
    return i;
}
输出:

$ gcc -c -ansi -pedantic main.c
main.c: In function 'foo':
main.c:1:1: error: parameter name omitted

一个可能的原因是某些工具在声明参数和定义参数不匹配时发出警告。或者当特殊注释中的参数与声明/定义中的参数不匹配时(如)。