神奇的C语言十一:extern怎么用?

1、extern主要涉及的问题就是变量作用域。

extern用于将定义在程序中某个位置的全局变量或文件内部静态变量的作用域扩展到extern所在的作用域中extern所在行的下方。

看例子:

int a = 100;
int main(){
	int a = 99;
	{
		int a = 88;
		if (a == 88)
		{
			extern int a;
			printf("%d", a);
		}
	}
	return 0;
}

extern int a所在作用域中extern int a的下方只有一条printf语句,extern的作用这里是扩展全局变量的作用域,所以printf编译时起作用的是全局变量a。

有了这个特性,我们就可以游刃有余地处理全局变量和局部变量重名的问题了。


2、extern一个函数有什么用?

没啥用。(可能的作用是暗示别人这个函数可能是在别的文件里面定义的)。


3、extern "C"

在C++里面用到的。C++编写的库中的函数的名称会发生变化,这是为了实现函数多态。C++编译器在解析外部库的时候默认按照C++的方式来解析,会尝试还原出函数原来的名字‘。如果导入的是C编写的库,函数名没有经过C++那种方式的处理,就会被还原出错误的名称。为了阻止还原名称的操作,就需要程序员告诉编译器,此库是C写的,不要进行还原。extern "C"起的就是这个作用。


4、extern还需要注意什么

一、static变量和函数的作用范围是文件内的,因为编译时不会生成static变量、函数的导出符号,所以不能在别的文件中使用该static变量/函数。

二、定义数组和定义指针不一样,所以int a[88]不能通过extern int * a来声明。extern int * a声明的是 int * a。














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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值