伙计们,我真的很喜欢-Wshadow选项,因为它有助于发现一些可能有问题的代码片段.我想在一个非常大的项目中使用它,但我不能,因为它太严格了.例如,它会针对以下情况抛出警告:
struct Foo
{
Foo(int info) : info_(info) {} //shadow warning is here
void info(){ ... }
int info_;
};
Run Code Online (Sandbox Code Playgroud)
gcc 在构造函数中抛出关于"int info"变量阴影"void info"方法的警告,这对我来说并不是真正有用的警告.
我真正关心的是如下情况:
int i = 0;
for(int j=0;j<10;++j)
{
int i = j; //local scope variable "int i" shadows outer scope variable
++i;
}
Run Code Online (Sandbox Code Playgroud)
是否有可能gcc只对这些案件发出警告?
Gru*_*bel 10
对于外部库,您可以尝试使用-isystem而不是指定其包含路径-I,这将导致gcc在大多数情况下停止在其中报告警告.
当警告仅在几个有限的情况下弹出时,您可以使用以下方法解决:
#pragma GCC diagnostic ignored "-Wshadow"
对于其余的案例,重构代码或做其他人grep提到的技巧似乎是唯一的选择.