extern 作用:用于声明变量前面,表示这是声明而不是定义,具体的定义在别的文件中。
int a; //这是定义
int a = 1; //这也是定义
extern int a; //这是声明
extern int a = 1;//这是定义,extern没用了。
一个变量只能定义一次,可以声明多次。
想让一个变量变成全局变量该怎么做?即:想在一个文件中定义一个全局变量,然后在其他文件中可以被访问。
全局变量:在一个文件中定义,然后在别的文件中extern声明这个变量,就可以在这个文件中使用。
例如:
在test.cpp中:
int a = 1;
要在别的文件中使用变量a,有两种方法:
(1)
在 main.cpp中:
extern int a;
int b = a;//就可以使用a了。这里没有用include,但编译器知道去别的文件找a的定义。
(2)
在main.cpp中:
include “test.cpp”
int b = a;//这样也可以使用,因为include 就相当于把include 的文件合并到这个文件中来了。
方法二有一个问题,当多个文件要用这个全局变量a的时候,include这个文件多次,这样就重复定义了a多次,编译器报错:重复定义。
一般在c++中,变量和函数都在cpp文件中定义(在头文件中定义,如果被include多次会重复定义),然后定义的东西都在同名的头文件中声明,这样用这个文件的时候看简洁的头文件就行了。
所以一般在test.h中有extern int a; //用extern表示是声明
然后在test.cpp中,include "test.h"。这样cpp中定义的变量a,就是头文件中声明的a。
如果test.h会被include两次或两次以上,那么这个extern必须加,不加的话是定义,开篇讲到过。
当别的文件中想使用全局变量a时:
方法一:
extern int a;
方法二:
include "test.h" //因为这个头文件中有extern int a;
方法二更符合习惯。一般c++面向对象编程很少有单独的全局变量暴露在类外面,所以一般有全局变量的话,统一放到一个cpp文件中,在这个文件中定义,然后在同名的头文件中声明。要用这些全局变量的话,include这个头文件就行了。