GCC 切换以启用警告分析

问题描述 投票:0回答:3

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

debugging gcc warnings
3个回答
2
投票

尝试使用

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

-Wunused-variable

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

3.8 请求或抑制警告的选项

此行为在 GCC 4.4 中已发生更改

未初始化的警告不再需要启用优化,即

-Wuninitialized
可以与
-O0
一起使用。尽管如此,如果启用优化,
-Wuninitialized
给出的警告可能会更准确。


0
投票

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


0
投票

DDD 和 GDB 基本上可以处理使用

gcc -O -g
编译的代码。 有时变量并不在您期望的范围内,但 DDD 足够聪明,可以说“优化掉”而不是惊慌失措。 但毫无疑问,关闭 -O 会更容易调试——我在学生的代码中经常看到这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.