代码之家  ›  专栏  ›  技术社区  ›  bdonlan

GCC切换以启用警告分析

  •  2
  • bdonlan  · 技术社区  · 15 年前

    在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 回复  |  直到 15 年前
        1
  •  2
  •   Bastien Léonard    15 年前

    试用使用 -Wall 而不是 -W . -W 不推荐使用IIRC。(正如乔纳森·莱弗勒在评论中指出的那样, -W 的替换是 -Wextra 不是 )

    [编辑]

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

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

    [编辑]

    这种行为 changed in GCC 4.4 :

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

        2
  •  0
  •   Norman Ramsey    15 年前

    DDD和 gdb 主要能处理编译的代码 gcc -O -g . 有时变量不在您期望的范围内,但ddd足够聪明,可以说“优化了”,而不是惊慌失措。但毫无疑问,在关闭-o的情况下进行调试更容易——我在学生的代码中看到了很多这样的情况。

        3
  •  0
  •   JesperE    15 年前

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