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

问题描述 投票:0回答:2

如果操作系统与此事完全相关,我正在 Ubuntu 10.10(64 位)上使用 g++。 我看到了一些奇怪的东西,所以我决定检查一下,出于某种原因,这个代码

#include <iostream>

int main()
{
    int a;
    
    std::cout << a << std::endl;

    return 0;
}

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

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

c++ g++ initialization
2个回答
7
投票

GCC 不会将未初始化的变量初始化为 0。这只是

a
0
的情况。

如果您想要做的是在使用未初始化的变量时收到警告,您可以使用 GCC 选项

-Wuninitialized
(也包含在
-Wall
中)。

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

valgrind
可以做到这一点。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.