extern
是C语言中的关键字,它会声明一个全局变量或者函数,表明变量或者函数是定义在其他其他文件中的。
定义:表示创建变量或分配存储单元。
声明:说明变量的性质,但并不分配存储单元。
extern int i; // 只是声明,但没有分配内存空间给变量i
int i; // 是定义,给变量i分配了4个字节
extern int i = 17; // 是定义,但使用extern时不应该对变量进行定义
extern
往往用来在头文件中声明变量(对于函数而言,如果没有函数体,即{}
中的代码,那么就是声明;反之,则为定义。因此,函数的定义与声明很好区分,不需要用到extern
),以便在多个.c
/.cpp
文件中定义和使用该变量。
例如,在a.h
文件中声明变量extern map<int, int> mp;
,之后可以在a.cpp
中定义全局变量map<int,int> mp;
(只能在函数外定义),然后再在main.cpp
中使用变量mp[0] = 1;
需要注意的是,在头文件中使用extern
会声明一个全局变量,之后需要经过定义才能够使用该变量(在任意.cpp
文件的全局变量部分定义),而且这个全局变量只能定义一次。
关于多文件编程:在头文件(a.h
)中声明 变量/函数/类,然后再在对应的cpp文件(a.cpp
)中进行定义(变量,成员/非成员函数的主体),之后再编写main
函数以运行代码。