如果操作系统与此问题完全相关,我在Ubuntu 10.10(64位)上使用g ++。 我看到一些奇怪的东西所以我决定检查并出于某种原因这段代码
#include <iostream>
int main()
{
int a;
std::cout << a << std::endl;
return 0;
}
总是打印0.显然,g ++会将未初始化的变量自动初始化为相应的空值。问题是我想关掉这个功能,或者至少让g ++显示关于使用未初始化变量的警告,因为这样我的代码在VS上编译时效果不好。除此之外,我很确定C ++标准规定一个未用某个值隐式初始化的变量在所有可能的值中都有一个未定义的值,实际上每次执行程序时都应该是不同的,因为不同的部分每次执行时都会使用操作记忆。
显式问题:有没有办法让g ++显示未初始化变量的警告?
答案 0 :(得分:7)
GCC不会将未初始化的变量初始化为0.这只是a
为0
的情况。
如果你想要做的是在使用未初始化的变量时收到警告,你可以使用GCC选项-Wuninitialized
(也包含在-Wall
中)。
然而,它无法静态发现未初始化变量的任何可能用法:您需要一些运行时工具来发现它,并且valgrind
为此。
答案 1 :(得分:1)
您也可以尝试使用cppcheck之类的工具。通常,在编写良好的C ++中,很少有理由在不初始化的情况下声明变量。