为什么使用存储类说明符来确定两个独立的属性?

Gil*_*Mor 9 c storage static linkage

来自存储类说明符:

存储类说明符确定它们声明的名称的两个独立属性:存储持续时间和链接.

因此,例如,当static关键字用于全局变量和函数(无论如何,它的存储类是静态的)时,它设置它们与内部链接的链接.当用于函数内部的变量(没有链接)时 - 它将它们的存储类设置为静态.

我的问题是:为什么两种情况都使用相同的说明符?

das*_*ght 8

原因主要是历史性的:作为事后的想法,C语言的设计联系起来了.在早期版本中,您可以根据需要重新声明全局变量,链接器将为您合并所有这些声明:

Ritchie的初衷是模仿C关于FORTRAN COMMON声明的规则,理论上任何可以处理FORTRAN的机器都可以为C做好准备.在公共块模型中,可以多次声明公共变量; 相同的声明由链接器合并.(来源)

单个声明的当前规则随后与extern关键字一起出现.此时,有一大段C代码足以使向后兼容性变得重要.这可能是语言设计者不再引入新关键字来处理链接,static而是重用的原因.

  • 啊`COMMON`声明啊 - shuddder. (2认同)