忽略的后果是什么:警告:未使用的参数

Phi*_*ent 21 c++ warnings

我正在研究一个C++项目,我注意到我们对未使用的参数有很多警告.

如果忽略这些警告会有什么影响?

Ale*_*x B 57

在以下情况下,具有未使用参数的函数可能存在真正的错误:

  1. 有一个输出参数,它没有被分配或写入,导致调用者的值不确定.

  2. 其中一个参数是回调函数指针,您必须调用它并忘记这样做.如果#ifdef函数中有很多s,可能会发生.

  3. 声明一个具有相同名称的局部变量,该变量会影响参数,然后在函数中使用错误的值.

不使用输入参数可能是无害的,但是您可以通过将函数开头显式地标记未使用的输入参数void(适用于C和C++)来降低噪声以查看有用的警告:

(void)param1;
Run Code Online (Sandbox Code Playgroud)

要么,

#define UNUSED(expr) do { (void)(expr); } while (0)
...

void foo(int param1, int param2)
{
    UNUSED(param2);
    bar(param1);
}
Run Code Online (Sandbox Code Playgroud)

或者省略参数名称(仅限C++):

void foo(int param1, int /*param2*/)
{
    bar(param1);
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,在Qt库中使用UNUSED宏的方法:它有一个Q_UNUSED,它完全相同,但没有`do..while`包装器. (7认同)
  • 事实上,它看起来像一个常见的习语。我在几个地方见过它。 (2认同)

Tim*_*mbo 14

如果你有很多对你来说不重要的不重要的警告,你可能会忽略关于你刚才写的隐藏在它们中间的代码行的重要警告.

  • 这是不忽视警告的一个非常重要的原因.可能是最重要的原因. (3认同)

Joh*_*itb 14

对于禁用警告的gcc特定方法,您可以使用__attribute__((unused))like

void foo(int a, int b __attribute__((unused))) {

}
Run Code Online (Sandbox Code Playgroud)

忽略第二个参数.如果您的程序已经依赖于GCC技术,那么您可以使用该属性从该类警告中100%安全.