多个源文件共享变量--extern关键字

一、extern关键字使用介绍

通过使用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,其他文件都可以同步访问。

 

二、使用extern关键字需要注意的地方

注意:一个变量可以多次声明,但不可以多次定义。因此,下面的写法是错误的:

在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进行了定义。

多个源文件共享变量--extern关键字_第1张图片

 

三、通过共享头文件简化外部变量声明

当然,要实现在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,直接引用即可

 

 

你可能感兴趣的:(C++)