extern
关键字extern
关键字似乎应该是 static
的反义词,用于为其前面的名称指定外部链接,并且在某些情况下确实可以这样使用。例如,默认情况下,const
和 typedef
具有内部链接。你可以使用 extern
来赋予它们外部链接。
然而,extern
有一些复杂性。当你将一个名称指定为 extern
时,编译器将其视为声明而不是定义。对于变量,这意味着编译器不会为变量分配空间。你必须为变量提供一个单独的不带 extern
关键字的定义行。例如,以下是 AnotherFile.cpp
的内容:
extern int x;
int x { 3 };
或者,你可以在 extern
语句中初始化 x
,这样它就同时作为声明和定义:
extern int x { 3 };
在这种情况下,extern
并不是很有用,因为 x
默认具有外部链接。extern
的真正用途在于当你想从另一个源文件 FirstFile.cpp
中使用 x
时:
import <IOStream>;
extern int x;
int mAIn() {
std::cout << x << std::endl;
}
在这里,FirstFile.cpp
使用 extern
声明来使用 x
。编译器需要 x
的声明才能在 main()
中使用它。如果你没有 extern
关键字声明 x
,编译器会认为它是一个定义,并为 x
分配空间,导致链接步骤失败(因为全局范围内会有两个 x
变量)。有了 extern
,你可以使变量在多个源文件中全局可访问。