【发布时间】:2020-12-18 11:42:54
【问题描述】:
想知道C编程语言中声明一个不带static的全局变量,属于auto、extern、static、reg中的哪个存储类型?
【问题讨论】:
-
正确地说,C 没有任何真正的“全局”变量。这个词在 C 标准中没有使用关于标识符的内容。该标准使用不同的范围和链接概念来描述标识符的属性。
标签: c variables declaration linkage storage-duration
想知道C编程语言中声明一个不带static的全局变量,属于auto、extern、static、reg中的哪个存储类型?
【问题讨论】:
标签: c variables declaration linkage storage-duration
这样的变量具有外部链接和静态存储持续时间。它可以由常量表达式或字符串字面量初始化。
来自 C 标准(6.2.2 标识符的链接)
5 如果函数标识符的声明没有 存储类说明符,它的链接是完全确定的,就好像它 使用存储类说明符 extern 声明。 如果 对象标识符的声明具有文件范围,并且没有 存储类说明符,它的链接是外部的。
和(6.2.4 对象的存储持续时间)
3 一个对象,其标识符被声明为没有存储类 说明符 _Thread_local,并且具有外部或内部链接 或使用存储类说明符 static,具有静态存储 期间。它的生命周期是程序的整个执行过程及其 存储的值仅在程序启动之前初始化一次
最后(6.7.9 初始化)
4 具有静态的对象的初始化程序中的所有表达式 或线程存储持续时间应为常量表达式或字符串 文字。
【讨论】: