看到一个大神写的非常简单明了的回答,特地转载过来
链接:https://www.zhihu.com/question/265415085/answer/293495989
//是说这个变量是存在,但是不在(可能)当前的编译单元,后续链接时会在哪里发现
//大家共用这个全局变量
//如果在链接的时候,没有在任何地方发现这个变量的定义
//即没有不带 extern 的 int x,报链接错误
extern int x;
//是说这个变量是存在,且只存在当前编译单元,也可以叫它本地全局变量。
//可能多个编译单元都会有这个定义,比如这句写在一个 header 文件中
//多个 source 文件 include 了这个 header 文件
//那么每个 source 文件中都可以使用 x,但是每个 x 是独立存在
//即在 a.cpp 的 x 就是 a_x,在 b.cpp 的 x 就是 b_x。相互不会影响。
static int x;
------ 如果需要一个全局变量在多个源文件中共用,用 extern
extern.h
extern int x;
然后在某一个源文件中 externX.cpp,定义 x
#include "extern.h" //这个 include 不要也行
int x = 1;
------ 如果需要每个源文件中单独使用一个全局变量,用 static
static.h
static int x;
然后在所有源文件中 staticX.cpp,自由使用 x
#include "static.h"
//use x,只属于每个 cpp 独立的全局变量 x