G ++ 4.4“未初始化”变量

问题描述:

如果操作系统与此问题有关,我在Ubuntu 10.10(64位)上使用g ++。 我看到了一些奇怪的事情,所以我决定检查和出于某种原因这个代码G ++ 4.4“未初始化”变量

#include <iostream> 

int main() 
{ 
    int a; 

    std::cout << a << std::endl; 

    return 0; 
} 

始终打印0显然g ++一样未初始化变量的初始化自动给其相应的空值。关键是我想关闭这个功能,或者至少让g ++显示关于使用未初始化的变量的警告,因为这样我的代码在VS编译时就不能正常工作。除此之外,我非常确定C++标准规定,一个未用某个值隐式初始化的变量在所有可能的值中都有一个未定义的值,实际上这与每次执行程序时都会有所不同,因为不同部分的每次执行时都会使用操作内存。

显式问题:有没有办法让未初始化的变量显示g ++警告?

+1

-Wall http://www.network-theory.co.uk/docs/gccintro/gccintro_30.html – Anycorn 2011-01-20 19:23:50

GCC不会将未初始化的变量初始化为0.仅仅是a0的情况。

如果您希望在使用未初始化的变量时收到警告,则可以使用GCC选项-Wuninitialized(也包含在-Wall中)。

但是,它不能静态地发现未初始化变量的任何可能用法:您需要一些运行时工具来发现它,并且有valgrind

您也可以尝试使用像cppcheck这样的工具。一般而言,在编写良好的C++中,很少有理由声明变量而不初始化它。