【问题标题】:Global variable belongs to which storage type in c? [duplicate]全局变量属于c中的哪种存储类型? [复制]
【发布时间】:2020-12-18 11:42:54
【问题描述】:

想知道C编程语言中声明一个不带static的全局变量,属于auto、extern、static、reg中的哪个存储类型?

【问题讨论】:

  • 很容易被搜索到,被What is default storage class for global variables?欺骗了
  • 正确地说,C 没有任何真正的“全局”变量。这个词在 C 标准中没有使用关于标识符的内容。该标准使用不同的范围和链接概念来描述标识符的属性。

标签: c variables declaration linkage storage-duration


【解决方案1】:

这样的变量具有外部链接和静态存储持续时间。它可以由常量表达式或字符串字面量初始化。

来自 C 标准(6.2.2 标识符的链接)

5 如果函数标识符的声明没有 存储类说明符,它的链接是完全确定的,就好像它 使用存储类说明符 extern 声明。 如果 对象标识符的声明具有文件范围,并且没有 存储类说明符,它的链接是外部的。

和(6.2.4 对象的存储持续时间)

3 一个对象,其标识符被声明为没有存储类 说明符 _Thread_local,并且具有外部或内部链接 或使用存储类说明符 static,具有静态存储 期间。它的生命周期是程序的整个执行过程及其 存储的值仅在程序启动之前初始化一次

最后(6.7.9 初始化)

4 具有静态的对象的初始化程序中的所有表达式 或线程存储持续时间应为常量表达式或字符串 文字。

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2017-01-01
    • 2021-10-18
    • 2019-04-14
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多