在C中实现静态和全局变量

时间:2012-11-23 06:37:37

标签: c

C中的静态和全局变量都存储在数据段(未初始化或初始化)中,但静态变量范围只是该文件或该函数和全局变量范围是整个程序,并且两个变量生命都是整个程序如何实现。它们存储在相同的段中,即使它们的行为有所不同。

1 个答案:

答案 0 :(得分:3)

即使两者都在数据分段中存在差异,static变量有internal linkageglobalexternal linkage(默认情况下),这就是为什么静态在当前的翻译单位,但全局变量在其他单位中可见。

通过声明变量static(在全局范围内),这意味着您只将变量限制为当前文件。

初始化和未初始化的变量也在两个不同的部分中进行了划分

here是程序的每个变量和代码的实际分段。

C99 Standard : 6.2.2 Linkages of identifiers

2

在构成整个程序的翻译单元和库集中 使用external linkage声明特定标识符表示相同的对象或 功能。在one translation unit内,具有internal linkage的标识符的每个声明表示相同的对象或功能。标识符no linkage的每个声明都表示一个唯一的实体。

3

如果对象或函数的文件范围标识符的声明包含storageclass 说明符static,标识符为internal linkage。22)