C静态变量和初始化

时间:2010-04-11 13:44:49

标签: c static initialization

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

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

 static int x;

 int main(void)
 {

 DO SOMETHING WITH x HERE

 x++;

 }

如果我选择将x首先初始化为

中的值,那会有什么不同
static int x = 0;  

进入“主要”之前?

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

非常感谢...

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

答案很清楚here

简短摘录:

首先,在ISO C(ANSI C)中,必须在程序启动之前初始化所有静态和全局变量。如果程序员没有明确地这样做,那么编译器必须将它们设置为零。如果编译器没有这样做,它就不会遵循ISO C.但是,标准没有指定变量初始化的确切方式。

答案 2 :(得分:3)

static变量自动初始化为零(即好像你已经为它们分配零,导致浮点数和指针分别变为0.0和NULL,即使这些值的内部表示不是所有位为零)。

答案 3 :(得分:0)

静态变量总是隐式初始化为零,因此将x显式初始化为零没有区别。