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