可能重复:
Does gcc automatically initialize static variables to zero?'静态' 对象
是静态声明保证在函数内部对象与0
初始化?
例如:
int func(void)
{
static int x;
...
}
是否标准的承诺后的func()
第一次调用该x = 0
?
可能重复:
Does gcc automatically initialize static variables to zero?'静态' 对象
是静态声明保证在函数内部对象与0
初始化?
例如:
int func(void)
{
static int x;
...
}
是否标准的承诺后的func()
第一次调用该x = 0
?
简短的回答,是的。
静态的未初始化变量驻留在可执行文件的.bss
段中,操作系统在调用main
之前,在程序启动时分配并将它们归零。
没错。要了解更多可以参考完全相同的问题问前一阵子在这里:
的C99 Standard说:
5.1.2执行环境
...中的所有对象在启动程序 之前,初始化(设置为其初始值)的静态存储器应为 。
而且它也说,与static
限定词定义一个局部变量具有“静态存储”,并在没有初始化的所有对象采取正确的类型,它们的值0。
是的,它的初始化为零。但是,使用静态方法变量根本不是一个好主意。 C#明确避免了混淆,并且已经放弃了对静态方法变量的支持。
所有的静态变量存储在Datasection在存储部分,所有的变量设置为默认值。
初始化它仍然是一个好主意。 – Dima 2011-05-04 17:49:15
@迪玛:一个特殊的原因? – 2011-05-04 17:52:28
这是一个很好的做法,恕我直言。这样您就不必考虑哪些变量会自动初始化,哪些变量不会自动初始化。假设您以后决定'x'不应该是静态的,但忘记初始化它,并且该错误将是一个极大的痛苦。 – Dima 2011-05-04 17:58:59