通过使用extern关键字,可以在一个源文件中定义变量,在其他源文件中访问该变量,实现不同源文件共享变量。即:
在test1.cpp中定义变量a并初始化:
int a = 1; //在test1.cpp中定义变量a,其初始值赋为1
在test2.cpp声明外部变量a,就可以直接访问变量a了:
extern int a; //在test2.cpp中声明外部变量a,告诉编译器在本文件中访问变量a时,应该从其他源文件中查找该变量的定义
std::cout << a << std::endl;
同理,在test3.cpp声明外部变量a,也可以直接访问变量a了:
extern int a; //在test3.cpp中声明外部变量a,告诉编译器在本文件中访问变量a时,应该从其他源文件中查找该变量的定义
std::cout << a << std::endl;
这样就实现了test1、test2和test3共享变量a,其中任一文件修改变量a,其他文件都可以同步访问。
注意:一个变量可以多次声明,但不可以多次定义。因此,下面的写法是错误的:
在test1.cpp定义变量a,其初始值赋为1:
int a = 1;
在test2.cpp定义变量a,其初始值赋为1,同时声明该变量为外部变量:
extern int a = 1;
std::cout << a << std::endl;
编译器会报错变量a重定义,因为变量a同时在源文件test1.cpp和test2.cpp进行了定义。
当然,要实现在test1.cpp中定义,在test2.cpp和test3.cpp中使用,也可以通过公用头文件简化编码,即只需要在头文件中声明一次外部变量,在所有源文件直接#include头文件即可:
在test.h声明外部变量a:
#pragma once
//在test.h中声明变量a为外部变量
//注意:这里只能声明,不能定义,即不能给a赋初值,否则编译时会报“a重定义:多次初始化”的错误
extern int a;
在test1.cpp引用头文件test.h,对变量a进行初始化:
#include "test.h"
//在test1.cpp中定义变量a,其初值赋为1
int a = 1;
在test2.cpp引用头文件"test.h",就可以直接访问变量a了:
#include "test.h"
std::cout << a << std::endl; //由于test2.cpp引用了头文件test.h,所以不需要再次声明变量a,直接引用即可
a = 2; //当然,在test2.cpp中除了可以访问变量a,也可以修改变量a
t同理,在test3.cpp引用头文件"test.h",也可以直接访问变量a:
#include "test.h"
std::cout << a << std::endl; //同理,test3.cpp也引用了头文件test.h,所以不需要再次声明变量a,直接引用即可
因篇幅问题不能全部显示,请点此查看更多更全内容