extern 关键字的用法,
示例:
在tet.cpp中声明了一个变量,而想在main的主文件中使用这个变量,就可以使用extern关键字来找到这个变量。不需要包含 .h 的方法。
项目目录:
tet.cpp
int a = 5;
static int z = 7;
void swap_b(int a, int b){
int temp;
temp = a;
a = b;
a = temp;
}
main.cpp
#include <iostream>
using namespace std;
extern int a;
//extern int z;
//static int a = 5;
int main(){
cout << a << endl;
// cout << z << endl;
int a = 0, b =1;
// swap_b(a, b);
cout << a << " " << b << endl;
return 0;
}
static声明的变量只会在本文件中使用,而不会在外部文件中使用:
修改以上代码
#include <iostream>
using namespace std;
extern int a;
extern int z;
//static int a = 5;
int main(){
cout << a << endl;
cout << z << endl;
int a = 0, b =1;
// swap_b(a, b);
cout << a << " " << b << endl;
return 0;
}
编译未通过:
函数:
函数默认为extern类型,而声明为static的函数的作用域为本文件。
extern与语言链接性:
链接程序要求每个不同的函数有不同的符号名。
C语言编译器可能将spoff这样的函数翻译为_spoff。
但在C++中,同一个名称可能对应多个函数,必须将这些函数翻译为不同的符号名称。可能将spoff(int)转换为_spoff_c,而将spoff(double,double)转换为_spoff_d_d
可以用extern指定规约:
extern "C" void spoff(int);//use C protocol for name look-up
extern "C++" void spoff(int);//use C++ protocol for name look-up