gcc -Wshadow选项的更细粒度的行为

pac*_*nga 7 c gcc

伙计们,我真的很喜欢-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提到的技巧似乎是唯一的选择.