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关键字可以帮助组织跨多个文件的代码,方便代码管理和模块化设计。但是,过度使用全局变量可能会引起程序设计上的问题,如数据封装不足、线程安全问题等,因此应当谨慎使用。