extern作用与用法
在C++中,extern
关键字用于指定变量或函数的定义在其他的文件中。这样可以在多个文件之间共享变量或函数。主要用途是用于提供对全局变量和函数的访问,尤其是在大型项目中多文件共用的场景。
extern
用法主要有以下几种场景:
声明全局变量而不定义它:
extern
用来在一个文件中声明一个全局变量,而不是定义它。真正的定义会在别的地方。这样做的目的是为了在多个文件中共享这个变量。1
2
3
4
5// file1.cpp
int myGlobal; // 定义一个全局变量
// file2.cpp
extern int myGlobal; // 声明相同的全局变量,告诉编译器其定义在其他地方以上代码中,
file1.cpp
定义了一个全局变量myGlobal
,而file2.cpp
使用extern
来声明这个全局变量,以便可以在file2.cpp
中访问file1.cpp
中定义的myGlobal
。声明函数: 一般情况下,函数在C++中默认是
extern
的,即使没有显式声明。但是你也可以显式地声明它,特别是在你想要强调函数可以在其他文件中被访问时。1
2
3
4
5// file1.cpp
void doSomething(); // 默认extern
// file2.cpp
extern void doSomething(); // 显式声明与
static
关键字的对比:extern
和static
在用于变量声明时有着对立的含义。static
用于限制变量或函数的链接作用域到定义它的文件,而extern
则表明变量或函数可以在多个文件间共享。使用
extern "C"
防止C++的名称修饰: 当你想要在C++代码中调用C语言编写的函数时,你需要防止C++编译器对这些函数名进行名称修饰(name mangling),因为C编译器不会这么做。extern "C"
可以用来告诉C++编译器不要修饰这些特定的函数名。1
2
3extern "C" {
}或者用于单个函数声明:
1
extern "C" void cFunction();
在实际开发过程中,使用extern
关键字可以帮助组织跨多个文件的代码,方便代码管理和模块化设计。但是,过度使用全局变量可能会引起程序设计上的问题,如数据封装不足、线程安全问题等,因此应当谨慎使用。