如果我在此代码中有一个全局静态变量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要设置为零,因为它是一个静态变量?我听说我们可以用静态变量做到这一点。
非常感谢...
答案 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显式初始化为零没有区别。