存储类说明符确定它们声明的名称的两个独立属性:存储持续时间和链接。
因此,例如,当static
关键字用于全局变量和函数(无论如何,它的存储类是静态的)时,它设置它们与内部链接的链接。当用于函数内部的变量(没有链接)时 - 它将它们的存储类设置为静态。
我的问题是:为什么两种情况都使用相同的说明符?
答案 0 :(得分:8)
原因主要是历史性的:作为事后的想法,C语言的设计联系起来了。在早期版本中,您可以根据需要重新声明全局变量,并且链接器将为您合并所有这些声明:
Ritchie的初衷是模仿C关于FORTRAN COMMON声明的规则,理论上任何可以处理FORTRAN的机器都可以为C做好准备。在公共块模型中,可以多次声明公共变量;相同的声明由链接器合并。 (source)
单个声明的当前规则以及extern
关键字随后出现。此时,有一大段C代码足以使向后兼容性变得重要。这可能是语言设计者不再引入新关键字来处理链接,而是重新使用static
的原因。