函数中的“静态”对象

时间:2011-05-04 17:46:30

标签: c static

  

可能重复:
  Does gcc automatically initialize static variables to zero?

函数内的静态声明对象是否保证使用0初始化?

例如:

int func(void)
{
   static int x;
   ...
}

第一次调用x = 0时,标准是否承诺func()

5 个答案:

答案 0 :(得分:5)

C99 Standard说:

  

5.1.2执行环境

     

......静态存储中的所有对象都应该是          在程序之前初始化(设置为初始值)          启动。

并且它还说用static限定符定义的局部变量具有“静态存储”,并且在没有初始化的情况下,所有对象都为它们采用正确类型的值0。

答案 1 :(得分:1)

简短的回答,是的。

静态,未初始化的变量驻留在可执行文件的.bss段中,操作系统在程序启动时分配并将它们归零,然后调用main

答案 2 :(得分:1)

没错。如需更多见解,您可以参考前面提到的完全相同的问题:

Does gcc automatically initialize static variables to zero?

答案 3 :(得分:0)

是的,它确实被初始化为零。但是,使用静态方法变量可能仍然不是一个好主意。 C#明确避免了混淆,并且已经放弃了对静态方法变量的支持。

http://blogs.msdn.com/b/csharpfaq/archive/2004/05/11/why-doesn-t-c-support-static-method-variables.aspx

答案 4 :(得分:0)

所有静态变量都存储在内存部分的数据集中,其中所有变量都设置为默认值。