【发布时间】:2009-08-18 15:50:45
【问题描述】:
我有一个在函数中声明但未初始化的静态变量。这个变量会自动初始化为零吗?
static int idx;
【问题讨论】:
标签: c
我有一个在函数中声明但未初始化的静态变量。这个变量会自动初始化为零吗?
static int idx;
【问题讨论】:
标签: c
是的 - C 标准 ISO/IEC 9899:1999 又名 C99(和 C++)标准说必须如此。具体内容请参见WG14 N1256 的第 6.7.8 节(“初始化”)中的第 10 项。
正如其他人所指出的,最好始终初始化静态变量:
static int idx = 0;
这样做的原因并不是因为某些编译器可能并不总是将静态变量初始化为零(任何未能进行此类初始化的编译器都会被彻底破坏,并且不能声称是 C 或 C++ 编译器),而是说出你的意思——可能是最基本的编程规则。
【讨论】:
static int a; 和 static int a = 0;。我确实记得没有编译器,但我手头上似乎没有足够老的编译器......
虽然标准说是...良好的做法表明您应该始终初始化变量。您永远不知道何时更改编译器,或者必须在另一台机器上编译它,您希望最大限度地减少任何意外行为的可能性。
【讨论】: