【发布时间】:2020-08-17 08:18:55
【问题描述】:
我刚开始学习 C 编程。
在一些书籍和网络文章中,我可以发现 C 中的任何全局变量默认对应于static 存储类,但具有外部链接。
这是否意味着它部分是static,部分是extern?因为据我了解,任何带有static 存储类说明符的全局变量都只有内部链接,并且可以在同一个文件中访问。
P.S:我提到了这个问题 Global variables in C are static or not? ,但无法真正了解全局变量在 C 中默认是 static 还是 extern。
【问题讨论】:
-
该标准还在C11 Standard - 6.2.4 Storage durations of objects 中提供了有关对象的存储持续时间 的详细信息。确保您了解
extern存储类与变量是否对其他源可见有关,而存储持续时间 与每个存储类中定义的生命周期有关。 -
“我提到了这个问题 Global variables in C is static or not? ,但无法真正了解全局变量在 C 中默认是静态还是外部” - 链接答案的第一行说:如果不指定存储类(即extern或static关键字),则默认全局变量有外部链接。.
-
@P.P 你的意思是全局变量的默认存储类是 extern 吗??
-
伙计们,请停止使用
extern作为形容词。由于这个问题是关于 C 标准中一些混乱的术语,我们应该清楚。static和extern是关键字;它们是源代码中的文本。 “静态”和“外部”是形容词;它们出现在具有多种含义的短语中。 “外部链接”是指一个名称可以引用(链接到)多个翻译单元中的同一对象。 “外部声明”是指任何函数之外(外部)的声明。如果上下文不清楚,单独说“外部”可能会产生歧义。 -
此外,关键字
static和extern都具有多种效果,并且根据它们出现的位置而具有不同的效果,因此说某些标识符是extern或static并不清楚具体特征有意的。
标签: c static linkage storage-class-specifier