extern
是 C 和 C++ 编程语言中的一个关键字,用于声明变量或函数是在其他地方定义的。这通常用于跨多个源文件共享全局变量或函数。extern
关键字告诉编译器这个变量或函数的实现在别的地方,因此在链接阶段需要查找并包含它。
跨源文件共享全局变量
在不同的源文件中共享全局变量时,extern
关键字非常有用。假设你有两个源文件 file1.c
和 file2.c
,你想在 file2.c
中使用 file1.c
中定义的全局变量。
// file1.c
int globalVariable = 10; // 定义全局变量// file2.c
extern int globalVariable; // 声明变量,实际定义在 file1.c 中void someFunction() {// 现在可以使用 globalVariable 了printf("%d", globalVariable);
}
控制符号的可见性
在 C 语言中,extern
可以用来控制符号的可见性。如果你想让一个函数或变量只在本源文件中可见,可以在其前面加上 static
关键字。如果你想让它在其他源文件中也可见,可以使用 extern
。
// file1.c
extern int someVariable; // 声明变量,让编译器在其他文件中查找它的定义void someFunction() {// 函数定义
}// file2.c
int someVariable = 5; // 变量定义void anotherFunction() {// 这里不能直接使用 someFunction,因为它只在 file1.c 中可见
}
C++ 中的 extern "C"
在 C++ 中,extern "C"
用于告诉编译器,接下来的代码块应该按照 C 语言的规则进行编译和链接。这通常用于调用 C 语言库或编写可以被 C 程序调用的 C++ 函数。
extern "C" {// 这里声明的函数将按照 C 语言的规则进行链接void cStyleFunction();
}void cStyleFunction() {// 这个函数可以被 C 程序调用
}
在上面的例子中,cStyleFunction
函数将会以 C 语言的方式被编译和链接,这意味着它不会有 C++ 的名称修饰(name mangling),从而可以被 C 程序识别和调用。
总结
extern
关键字在 C 和 C++ 中用于声明变量或函数是在其他地方定义的,它有助于跨源文件共享数据和函数,以及在 C++ 中与 C 语言代码进行互操作。