我正在研究一个C++项目,我注意到我们对未使用的参数有很多警告.
如果忽略这些警告会有什么影响?
在以下情况下,具有未使用参数的函数可能存在真正的错误:
有一个输出参数,它没有被分配或写入,导致调用者的值不确定.
其中一个参数是回调函数指针,您必须调用它并忘记这样做.如果#ifdef
函数中有很多s,可能会发生.
声明一个具有相同名称的局部变量,该变量会影响参数,然后在函数中使用错误的值.
不使用输入参数可能是无害的,但是您可以通过将函数开头显式地标记未使用的输入参数void
(适用于C和C++)来降低噪声以查看有用的警告:
(void)param1;
要么,
#define UNUSED(expr) do { (void)(expr); } while (0) ... void foo(int param1, int param2) { UNUSED(param2); bar(param1); }
或者省略参数名称(仅限C++):
void foo(int param1, int /*param2*/) { bar(param1); }
如果你有很多对你来说不重要的不重要的警告,你可能会忽略关于你刚才写的隐藏在它们中间的代码行的重要警告.
对于禁用警告的gcc特定方法,您可以使用__attribute__((unused))
like
void foo(int a, int b __attribute__((unused))) { }
忽略第二个参数.如果您的程序已经依赖于GCC技术,那么您可以使用该属性从该类警告中100%安全.