为什么要使用无效(未使用)(以及类似),而不是杂牌参数沉默C++函数未使用的变量警告?

rsh*_*sht 1 c++ function

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

首先(在函数体内)

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

  i++;
}
Run Code Online (Sandbox Code Playgroud)

和类似的

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

void func2(int i, int /* marking 'unused' here */ ) {
  i++;
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 在函数声明中告知未使用的变量(无需查看实现)
  2. 使实际使用此变量成为不可能
  3. 使代码更清晰(这是主观的)

此外,为这两个函数生成的汇编代码是相同的(使用gcc 4.9.2测试),因此它也不是关于性能权衡.

鉴于此,我的问题是:为什么使用第一个这么常见?

Ale*_*lex 6

如果您使用的是C++,则可以使用Second.如果你有一些C遗产:第二个实际上是非法的.

码:

int foo(int) {
    int i=0;
    return i;
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ gcc -c -ansi -pedantic main.c
main.c: In function 'foo':
main.c:1:1: error: parameter name omitted
Run Code Online (Sandbox Code Playgroud)