C中的静态和全局变量都存储在数据段(未初始化或初始化)中,但静态变量范围只是该文件或该函数和全局变量范围是整个程序,并且两个变量生命都是整个程序如何实现。它们存储在相同的段中,即使它们的行为有所不同。
答案 0 :(得分:3)
即使两者都在数据分段中存在差异,static
变量有internal linkage
而global
有external 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)