简单理解 extern 全局变量声明

用extern可以声明全局变量,比如:

extern int a;

这句话的意思就是:大家注意了,小a童鞋是全局变量。

extern使用规则

1.extern声明可以在任意位置,任意文件中多次声明。

extern int a; 此时仅仅是声明,变量a没有内存空间,也没有赋值。

2.extern声明的全局变量必须初始化,而且只能初始化一次。

int a = 10; 此时才是变量a的定义,也就是初始化,即分配了内存,也有了初值。但只能定义一次。

示例

test01.h
extern int a; //声明全局变量
void func(void);//声明一个函数
test01.c
int a = 10; //初始化
void func(void)
{
	a += 100;
	printf("test01: a=%d\r\n",a);
}
main.c
int main(void) 
{
	extern int a;//全局声明,表示要引入的这个变量a是全局变量
	a += 50;
	printf("main: a=%d\r\n",a);//a=60,在main.c中修改a
	func();//a=160,在test01.c中又修改了a
	return 0;
}
简单的说:你在某个头文件中用extern对变量做全局声明,在对应的全局位置定义一次,你就可以在其他文件中使用它了。

那么,用extern声明全局变量,和我们常用的 int a 声明有何区别呢?

int a;
int a = 0;
这两句其实是一样的,int a;其实是个定义性声明,它已经为a分配了内存空间,并且赋初值为0了。而extern int a;纯粹是个声明,没有分配内存空间,也没有赋值。

使用环境的区别

一般我们写C++代码时,都会把变量封装到类里,很少会把变量直接暴露在全局环境下。使用变量的时候,都是通过类的实例来使用变量的,因此不存在直接使用全局变量的情况,也就很少用到extern关键字。当然不是绝对的,也要看具体情况。

而写C代码时,因为C没有类的概念,所以大多都是直接在头文件中定义变量,这时就需要考虑全局变量冲突的问题了,当多个文件互相包含时,如果使用int a;很容易导致变量重复定义,因此就常用extern声明全局变量,因为它仅仅是声明,不会导致重复定义。

extern声明函数

函数的声明本身默认就是extern全局声明,只是省略了。
因为函数的声明和定义是明显区分开的,因此不存在重复定义问题,所以函数不需要考虑extern全局声明。

extern用在C/C++混合编译中

extern还有一个用途,在C/C++混合编译中,通常是在C++文件中要引用C的函数,需要告诉编译器这个函数使用C的编译规则。
extern "C" void func( void );
或者

extern "C" {
	void func1( void );
	void func2( void );
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡十三刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值