是否可以向 g++ 添加额外的警告标志,以便它会警告我有关以下代码中未初始化的 b 变量?
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a;
while (a>0) b++;
cout << a;
}
编辑:我忘了说我已经尝试打开另一个问题中列出的标志: Flags to enable thorough and verbose g++ warnings但没有触发。 (“痒痒的!”正如我在下面了解到的。)
最佳答案
您选择的选项可能是 -Wmaybe-uninitialized
或 -Wuninitialized
。这两个都是 -Wall
选项的一部分,该选项打开这些选项和许多其他警告(-Wxxx
选项与警告相关)。
gcc 警告选项的完整文档可在以下位置阅读:Options to Request or Suppress Warnings在 gcc 文档中。
您可能还会发现 -Wextra
可能对您有用(单独使用或与 -Wall
结合使用)。 -Wextra
也启用了 -Wuninitialized
,但它还有一些不是总是由 -Wall
设置的其他项目,这些是我喜欢看到的(诸如 -Wunused-parameter
和 -Wunused-but-set-parameter
之类的东西...虽然那不是特定于这段代码。
那说...(是的,有一个“说”)...我似乎无法用 gcc 的这个功能来解决错误,它在 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;
}
这是对一些未使用的和统一的警告的尝试。我能够得到 z
变量来产生错误,但由于某种原因 b++
在那个 while 循环中不会使用 gcc 生成错误或警告(使用 gcc 4.9 测试.0).
但是,
clang 版本 3.4.1 会针对 b
和 z
虽然 -Wall
和 -Wextra
应该 产生您想要的警告,但出于某种原因它们不会产生所需的警告gcc 4.9.0 中的这段特定代码
关于c++ - 更好的编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962028/