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声明后,也可以正常使用该变量。

posted @ 2022-05-08 20:39  何太狼  阅读(773)  评论(0编辑  收藏  举报