C静态变量和初始化

yCa*_*ran 3 c static initialization

如果我在这段代码中有一个全局静态变量x

 #include <stdio.h>
 #include <stdio.h>

 static int x;

 int main(void)
 {

 DO SOMETHING WITH x HERE

 x++;

 }
Run Code Online (Sandbox Code Playgroud)

如果我选择将x初始化为一个值,那将会有所不同

static int x = 0;  
Run Code Online (Sandbox Code Playgroud)

在进入"主要"之前?

在我的第一种情况下,我没有为x赋值,编译器是否隐式知道x要设置为零,因为它是一个静态变量?我听说我们可以用静态变量做到这一点.

非常感谢...

ken*_*ytm 7

具有显式初始化的静态变量始终初始化为零(或空指针,具体取决于类型).C标准§6.7.8/ 10对此有描述.但明确地将其设置为0可以帮助其他人不必怀疑同样的问题:).


Sma*_*cat 5

这里有一个很好的答案:

只是一个简短的摘录:

首先,在ISO C(ANSI C)中,所有静态和全局变量都必须在程序启动之前初始化。如果程序员没有明确执行此操作,则编译器必须将它们设置为零。如果编译器不这样做,则它不遵循 ISO C。然而,标准未指定变量的具体初始化方式。