更好的编译器警告?

dav*_*agp 1 c++ g++ compiler-warnings

是否可以向g ++添加其他警告标志,以便它在下面的代码中警告我关于单元化的b变量?

#include <iostream>
using namespace std;
int main() {
  int a, b;
  cin >> a;
  while (a>0) b++;
  cout << a;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提到我已经尝试打开另一个问题中列出的标志: 标志启用彻底和冗长的g ++警告但没有触发.("嘀嗒!",如下所述.)

小智 7

您所追求的选项很可能-Wmaybe-uninitialized-Wuninitialized.这两个都是-Wall打开这些的选项的一部分,以及许多其他警告(-Wxxx选项与警告有关).

有关gcc警告选项的完整文档,请参阅:gcc文档中的请求或抑制警告选项.

您可能还会发现它-Wextra可能对您有用(单独使用或与之结合使用-Wall). -Wextra还支持-Wuninitialized,但它有没有总是被设定其它项目-Wall和是那些我喜欢看(喜欢的东西-Wunused-parameter-Wunused-but-set-parameter)......虽然不是专门针对该位的代码多数民众赞成.


这就是说......(是啊,有一个"上面写着")......我似乎不能胳肢错误与海湾合作委员会这一功能是可以用http://gcc.godbolt.org.

使用文档中具体描述的代码扩展代码 -Wmaybe-uninitialized

#include <iostream>
using namespace std;
int main() {
  int a, b;
  int x, y, z;
  // warning: variable ‘y’ set but not used [-Wunused-but-set-variable]
  cin >> a;
  while (a>0) b++;
  switch(a) {
    case 1: x = 1; y = 1; z++; break;
    // warning: ‘z’ may be used uninitialized in this function [-Wmaybe-uninitialized]
    case 2: x = 4; y = 2; break;
    case 3: x = 5; y = 3;
  }
  cout << a;
  cout << b;
  cout << x;
}
Run Code Online (Sandbox Code Playgroud)

这是试图搔痒一些未使用的和单元化的警告.我能够得到z变量来产生错误,但由于某种原因b++,while循环不会产生错误或gcc警告(使用gcc 4.9.0测试).

使用gcc 4.9.0发出警告

铛版本3.4.1,但是,并产生与这两个命令行选项警告bz

有关clang 3.4.1的警告

虽然-Wall并且-Wextra 应该产生你所追求的警告,但由于某种原因,他们没有为gcc 4.9.0中的这段特定代码产生所需的警告