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

终端不显示程序的警告。。。如何在航站楼看到它们?

  •  0
  • user8685279  · 技术社区  · 6 年前

    这是我用vim editor编写的一个简单程序:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int a;
        int b, c ;
        a=(b+c+11)/3;
        cout << "x=" << a;
        cout << "\n";
            return 0;
    }
    

    我们可以在windows中的visual studio中看到警告:

    ...error(s), 2 warning(s)
    ...\test1.cpp(7) : warning c4700: local variable 'b' used without having been initialized 
    ...\test1.cpp(7) : warning c4700: local variable 'c' used without having been initialized 
    

    但是,当我们使用gnome终端时,我们看不到警告:

    SSS@SSS:~/.cpp$ g++ test1.cpp -o test1
    SSS@SSS:~/.cpp$ chmod +x test1
    SSS@SSS:~/.cpp$ ./test1
    x=10925
    SSS@SSS:~/.cpp$
    

    在终端中,我们只能看到错误。。。
    如何查看这些警告?
    有命令吗?查看警告?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Jean-François Fabre Darshan Ambre    6 年前

    Visual studio默认警告级别不同于 g++ 默认警告级别。

    您需要启用警告(我建议 -Wall )去看他们。

    g++ -Wall test1.cpp -o test1
    

    打印:

    test1.cpp: In function 'int main()':
    test1.cpp:8:9: warning: 'b' is used uninitialized in this function [-Wuninitialized]
         a=(b+c+11)/3;
            ~^~
    test1.cpp:8:9: warning: 'c' is used uninitialized in this function [-Wuninitialized]
    

    正如信息所示 -Wuninitialized 对于此类警告已经足够了,但我建议您使用 -墙壁 对于初学者,如果您 真正地 在一些遗留代码上需要这样做,最好的方法是启用额外的警告,并将警告转化为错误,以便人们必须修复它们:

    g++ -Wall -Wextra -Werror ...
    

    还请注意,您不能依赖此警告来检测 全部的 未初始化的变量。有些复杂的情况下,编译器无法确定是否已初始化(请参阅 why am I not getting an "used uninitialized" warning from gcc in this trivial example? )。为此,您需要像Valgrind这样更专业的工具。