C ++标准的第7.1节提到'extern'是一个存储类说明符。
N3126 - “extern说明符可以是 仅适用于变量名称 和功能。 extern说明符 不能用于申报 类成员或函数参数。 用于声明名称的链接 有外部说明符,见3.5。 [ 注意:extern关键字也可以 用于显式实例化和 联系规范,但事实并非如此 这样的存储类说明符 上下文。 - 后注]
我理解这个关键字,它在'链接规范'的上下文中使用,但我无法掌握'extern'作为存储说明符的使用。
答案 0 :(得分:6)
extern
是存储类说明符。这只是语言语法的一个事实。 extern
对程序的语义有很多影响,具体取决于程序的使用位置。它到处都没有同样的效果。它会影响存储持续时间和对象的链接,它还有助于确定某些声明是否也是定义。
E.g:
int a; // Ex1
extern int b; // Ex2
例如,如果Ex1
和Ex2
在全局范围内,那么它们都将引用具有静态存储持续时间和外部链接的对象。但是,在C ++中,第一个是定义(C中的暂定定义),第二个不是。在此示例中,extern
未更改已声明对象的存储持续时间或链接。
如果函数体中出现Ex1
和Ex2
,则a
将引用具有自动存储持续时间且没有链接的对象,但b
将引用具有自动存储持续时间的对象外部链接和静态存储持续时间。在此示例中,extern
已在链接,存储持续时间以及是否为定义中影响了声明的含义。
最后,在C ++中,这是一个例子,其中extern
的唯一影响是改变从内部到外部的链接。
const int c = 5; // static storage duration, internal linkage
extern const int d = 10; // static storage duration, external linkage
答案 1 :(得分:2)
本身并非真正存储说明符。它出现在变量名称之前,就像其他存储说明符那样,但它只是关闭编译器并告诉链接器它还有更多的工作要做。
答案 2 :(得分:0)
extern关键字通知编译器外部变量存在(或函数),即使编译器无法在当前正在编译的文件中找到它 它迫使外部联系