2

在 GCC 中,某些警告需要启用优化。例如:

int foo() {
    int x;
    return x;
}

为了检测未初始化的变量,必须传递-O 。

$ gcc -W -Wall -c test.c
$ gcc -W -Wall -c test.c -O
test.c: In function ‘foo’:
test.c:3: warning: ‘x’ is used uninitialized in this function

但是,这可能会干扰调试。有没有办法只启用警告所需的分析阶段(不仅仅是这个特定的警告,而是尽可能多的),而不会对生成的代码产生太大影响?

我在 x86-64 上使用 GCC 版本 4.3.3 (Ubuntu 4.3.3-5ubuntu4)。

4

3 回答 3

2

尝试使用-Wall而不是-W. -W已弃用 IIRC。(正如 Jonathan Leffler 在评论中指出的那样,-W替换的是-Wextra,而不是-Wall。)

-Wunused-variable
每当局部变量或非常量静态变量在其声明之外未使用时发出警告。此警告由 启用-Wall

3.8 请求或禁止警告的选项

这种行为在 GCC 4.4 中发生了变化

未初始化警告不再需要启用优化,即-Wuninitialized可以与-O0. 尽管如此,-Wuninitialized如果启用优化,由 给出的警告可能会更准确。

于 2009-05-20T00:26:09.100 回答
0

DDD和 GDB 大多可以处理用gcc -O -g. 有时变量不在您期望的范围内,但 DDD 足够聪明,可以说“优化掉”而不是吓坏了。但是毫无疑问,关闭 -O 会更容易进行调试——我在学生的代码中看到了很多。

于 2009-05-20T04:52:45.473 回答
0

这就是您自动构建的目的。让您的自动构建引擎使用 -Werror -Wall -O2 构建,您将捕获由更高优化级别触发的所有警告。

于 2009-05-20T04:59:43.250 回答