在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)。
答案 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构建,并且您将捕获由更高优化级别触发的所有警告。