gcc是否自动将静态变量初始化为零?

gcc是否自动将静态变量初始化为零?,c,C,我在函数中声明了一个静态变量,但未初始化。这个变量会自动初始化为零吗 static int idx; 是的-C标准a.k.a.(和C++)标准说这一定是这样的。具体内容见第6.7.8节(“初始化”)第10项 正如其他人所指出的,始终初始化静态变量是一种良好的做法: static int idx = 0; 之所以这样做,并不是因为某些编译器可能不总是将静态变量初始化为零(任何没有进行初始化的编译器都会被终止,并且不能声称是C或C++编译器),这就是你的意思——可能是编程的最基本规则。当标准说是

我在函数中声明了一个静态变量,但未初始化。这个变量会自动初始化为零吗

static int idx;
是的-C标准a.k.a.(和C++)标准说这一定是这样的。具体内容见第6.7.8节(“初始化”)第10项

正如其他人所指出的,始终初始化静态变量是一种良好的做法:

static int idx = 0;

之所以这样做,并不是因为某些编译器可能不总是将静态变量初始化为零(任何没有进行初始化的编译器都会被终止,并且不能声称是C或C++编译器),这就是你的意思——可能是编程的最基本规则。

当标准说是时……良好的实践表明你应该总是初始化变量。您永远不知道当您更改编译器或必须在另一台计算机上编译它时,您希望将任何意外行为的可能性降至最低。

而且它还向未来的开发人员明确指出,您需要将值设置为零。double something important(){static double arr[1024*1024];…}每个成员的显式初始化可能有点困难。如果您有一个标准编译器,它将根据定义进行初始化。如果你不能依赖一些基本的东西,比如在你的编译器上工作,那就换一个编译器,因为你很难对任何代码进行推理。是的,不。总是初始化可能是为了更清楚,或者是为了避免变量很快变为非静态变量,并且您希望避免由于以后心不在焉而出现问题。适应那些蔑视标准的蹩脚编译器并不是做任何事情的好理由。。。反对显式零初始化静态变量的理由是,它会扩展可执行文件的大小,因为它们不再存在于.bss中。我不明白为什么会这样。编译器可以很容易地忽略显式零初始化。实现细节。GCC 4.2和MSVC 7.1似乎确实处理了
静态int a
静态int a=0等效。我确实记得没有的编译器,但我手头上似乎没有足够老的…@R。。但你从来没有试过,是吗?:)除了sizeof(int)*10000000<100 megs(sic)这一事实之外,您还误解了大多数C编译器是如何编译这些声明的,因为可执行文件的大小根本不会增长,并且只会在运行时产生影响。