函数中的"静态"对象

Mar*_*ark 5 c static

可能重复:
gcc是否自动将静态变量初始化为零?

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

例如:

int func(void)
{
   static int x;
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

pmg*_*pmg 5

C99标准说:

5.1.2执行环境

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

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


Bla*_*iev 1

简短的回答是,是的。

静态的、未初始化的变量驻留在.bss可执行文件的段中,操作系统在程序启动时(在main调用之前)对它们进行分配和清零。