考虑一下代码:
#include <stdio.h>
int x;
int main (void)
{ }
Run Code Online (Sandbox Code Playgroud)
的价值x是0里面main.但那是为什么呢?我没有宣布它static.或者假设static它在函数之外?
如果上述情况属实,它是如何与它不同的extern?
Pab*_*ruz 21
它既不是static也不是extern.它是一个变量,对于它所在的编译单元是可见的,并且还可以从声明x为extern变量的所有编译单元中看到.
为什么我说它既不是static也不是extern?
如果是extern,则必须有一个不同的编译单元,并附上x声明.显然这是你唯一的编译单元.
如果是,static则extern不允许x对此编译单元中定义的变量进行引用.我们知道我们可以很容易地声明这里声明的extern变量x.
为什么0分配给x?因为,在C中,所有全局变量都初始化为0.它在C99标准的6.7.8(10)中说明了这一点.
当我们说"静态存储持续时间"的变量被隐式初始化为0时,我们并不意味着您需要将"static"关键字放在它们前面.
"静态存储持续时间"仅仅是对象的特定存储持续时间,表示其存储持续整个程序的持续时间.这种存储持续时间用于在文件范围(如您的变量)和本地静态变量中声明的变量.
| 归档时间: |
|
| 查看次数: |
17479 次 |
| 最近记录: |