多个源文件共享变量--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进行了定义。

 

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

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

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值