代码之家  ›  专栏  ›  技术社区  ›  Chubsdad

外部存储类说明符

  •  2
  • Chubsdad  · 技术社区  · 14 年前

    N3126-“外部说明符可以是 以及功能。外部说明符 不能用于 对于声明的名称的链接 使用外部说明符,请参见3.5。[ 用于显式实例化和 存储类说明符 上下文。尾注]

    我了解这个关键字,并且它是在“链接规范”的上下文中使用的,但是我无法掌握如何使用“extern”作为存储说明符。

    1. 不是所有“外部”名称都有静态存储持续时间吗?
    2. 如果对1的回答是肯定的,那么为什么要这样冗余呢?C兼容性?
    3 回复  |  直到 14 年前
        1
  •  7
  •   CB Bailey    14 年前

    extern 是一个 存储类说明符 . 这只是语言语法的一个事实。 外部 根据程序的使用位置,对程序的语义有许多影响。它在任何地方都没有同样的效果。它影响对象的存储持续时间和链接,也有助于确定某些声明是否也是定义。

    例如。:

    int a; // Ex1
    
    extern int b; // Ex2
    

    例如,如果 Ex1 Ex2 在全局范围中,它们都引用具有静态存储持续时间和外部链接的对象。在C++中,第一个将是一个定义(C中的暂定定义),而第二个则不是。在这个例子中 外部 尚未更改声明对象的存储持续时间或链接。

    如果 例1 Ex2号 发生在函数体中 a b 将引用具有外部链接和静态存储持续时间的对象。在这个例子中, 外部

    最后,在C++中,这里是一个例子,其中唯一的效果是 外部 正在将链接从内部更改为外部。

    const int c = 5; // static storage duration, internal linkage
    
    extern const int d = 10; // static storage duration, external linkage
    
        2
  •  2
  •   Ignacio Vazquez-Abrams    14 年前

    不是的 真正地 存储说明符本身。它出现在变量名之前 其他 存储说明符可以,但它所做的只是关闭编译器并告诉链接器它还有更多的工作要做。

        3
  •  0
  •   Saurabh Raoot    6 年前

    Extern关键字通知编译器存在一个Extern变量(或函数),即使编译器在当前编译的文件中找不到它 它迫使外部联系