终端不显示程序的警告...如何在终端中查看它们?
Terminal does not show the warnings of a program...How to see them in terminal?
这是我用 vim 编辑器编写的一个简单程序:
#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-terminal 时,我们看不到警告:
SSS@SSS:~/.cpp$ g++ test1.cpp -o test1
SSS@SSS:~/.cpp$ chmod +x test1
SSS@SSS:~/.cpp$ ./test1
x=10925
SSS@SSS:~/.cpp$
在终端中我们只能看到错误...
如何查看这些警告?
任何命令?查看警告?
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
足以应对此类警告,但我建议您首先使用 -Wall
,如果您 真的在一些遗留代码上需要它,最好的方法是启用额外的警告,并将警告转化为错误,以便人们必须修复它们:
g++ -Wall -Wextra -Werror ...
另请注意,您不能依赖此警告来检测所有 个未初始化的变量。在某些复杂情况下,编译器无法确定它是否已初始化(请参阅 )。为此,您需要一个更专业的工具,例如 Valgrind。
这是我用 vim 编辑器编写的一个简单程序:
#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-terminal 时,我们看不到警告:
SSS@SSS:~/.cpp$ g++ test1.cpp -o test1
SSS@SSS:~/.cpp$ chmod +x test1
SSS@SSS:~/.cpp$ ./test1
x=10925
SSS@SSS:~/.cpp$
在终端中我们只能看到错误...
如何查看这些警告?
任何命令?查看警告?
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
足以应对此类警告,但我建议您首先使用 -Wall
,如果您 真的在一些遗留代码上需要它,最好的方法是启用额外的警告,并将警告转化为错误,以便人们必须修复它们:
g++ -Wall -Wextra -Werror ...
另请注意,您不能依赖此警告来检测所有 个未初始化的变量。在某些复杂情况下,编译器无法确定它是否已初始化(请参阅