gcc是否自动将静态变量初始化为零?
答
是 - C标准ISO/IEC 9899:1999又名C99(和C++)的标准说,这一定是这样。请参阅WG14 N1256的第6.7.8节(“初始化”)中的第10项准确的文本。
正如其他人所指出的那样,这是很好的做法,总是初始化静态变量:
static int idx = 0;
之所以这样做,这不是因为一些编译器可能不总是初始化静态变量零(失败的编译器做这样的初始化将会终止,并且不能声称是C或C++编译器),那就是说出你的意思 - 可能是最基本的编程规则。
答
虽然标准说是的...良好的做法表明,你应该总是初始化变量。你永远不知道什么时候你改变编译器,或者不得不在另一台机器上编译它,你想尽量减少意外行为的可能性。
然后再一次...反对显式初始化静态变量的参数是它扩展了可执行文件的大小,因为它们不再存在于.bss中。 – ephemient 2009-08-18 16:17:29
我不明白为什么应该如此。编译器可以很容易地忽略显式的零初始化。 – 2009-08-18 16:21:46
实现细节。 GCC 4.2和MSVC 7.1确实似乎将'static int a;'和'static int a = 0;'等价处理。我记得编译器没有,但我似乎手头上没有足够的... – ephemient 2009-08-18 18:19:13