extern与.h文件
extern
extern
是一个关键字。正常情况下,声明一个全局变量会自动定义它,并未它分配内存,但加上extern
后不会定义,仅仅是声明。
#include <bits/stdc++.h>
using namespace std;
extern int a;
int main()
{
cout << a << endl;
return 0;
}
编译失败。
#include <bits/stdc++.h>
using namespace std;
int a;
int main()
{
cout << a << endl;
return 0;
}
编译成功,输出为0
extern用法
通过extern可以给出声明,但是我们可以在其他地方给出定义。
t.cpp
#include <bits/stdc++.h>
using namespace std;
extern int a;
int main()
{
cout << a << endl;
return 0;
}
tt.cpp
#include <bits/stdc++.h>
int a = 3;
通过g++ -o test.exe t.cpp tt.cpp
编译得到test.exe
运行后输出10。
extern与.h文件
在编译多文件的时候,我们可能会在多个文件同时用到一个变量,但在.h文件定义变量十分危险,即使使用了pragma one
和#ifndef
也会造成变量多次定义。因为不同的.cpp文件分开编译,此时他们都会有.h文件中变量的定义,连接时就会报错。
我们可以使用extern
将.h中的定义改成声明,在任意一个.cpp定义该变量后,就可以在所有的文件中正常使用。也可以不在.h中声明,在一个.cpp文件定义变量后,其他.cpp文件先使用extern
声明后,也可以正常使用该变量。