gcc切换以启用警告分析

时间:2009-05-20 00:14:05

标签: debugging gcc compiler-construction warnings

在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)。

3 个答案:

答案 0 :(得分:2)

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

[编辑]

  

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

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Warning-Options.html#Warning-Options

[编辑]

此行为有changed in GCC 4.4

  

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

答案 1 :(得分:0)

DDD和gdb可以主要处理使用gcc -O -g编译的代码。有时变量不在你预期的范围内,但是DDD足够聪明地说“优化了”而不是吓坏了。但毫无疑问,关闭-O调试更容易 - 我的学生代码已经看到了很多。

答案 2 :(得分:0)

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