C中主要变量的范围

Kan*_*hk 15 c variables

考虑一下代码:

#include <stdio.h>

int x;

int main (void) 
{ }
Run Code Online (Sandbox Code Playgroud)

的价值x0里面main.但那是为什么呢?我没有宣布它static.或者假设static它在函数之外?

如果上述情况属实,它是如何与它不同的extern

Pab*_*ruz 21

它既不是static也不是extern.它是一个变量,对于它所在的编译单元是可见的,并且还可以从声明xextern变量的所有编译单元中看到.

为什么我说它既不是static也不是extern

如果是extern,则必须有一个不同的编译单元,并附上x声明.显然这是你唯一的编译单元.

如果是,staticextern不允许x对此编译单元中定义的变量进行引用.我们知道我们可以很容易地声明这里声明的extern变量x.

为什么0分配给x?因为,在C中,所有全局变量都初始化为0.它在C99标准的6.7.8(10)中说明了这一点.


Joh*_*itb 6

当我们说"静态存储持续时间"的变量被隐式初始化为0时,我们并不意味着您需要将"static"关键字放在它们前面.

"静态存储持续时间"仅仅是对象的特定存储持续时间,表示其存储持续整个程序的持续时间.这种存储持续时间用于在文件范围(如您的变量)和本地静态变量中声明的变量.