-2

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

4

1 回答 1

3

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

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

初始化和未初始化的变量也被存储在两个不同的段中

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

C99 Standard : 6.2.2 Linkages of identifiers

2

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

3

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

于 2012-11-23T06:44:40.880 回答