extern使用小结

本文详细总结了extern关键字在C/C++中的使用,包括extern如何定义和声明函数,extern "C"用于跨文件链接,以及extern声明全局变量的方法。同时探讨了extern与static、include之间的关系,帮助读者深入理解extern的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述


extern 可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它文件中寻找其定义。extern 也可用来进行链接指定。

函数


extern定义函数


函数定义的前面如果加上extern,说明该函数可以在外部文件中使用。默认的应该就是extern,定义函数时如果没有指定是static,那么编译器会自动给函数添加extern关键字, 声明为外部可用。

extern声明函数


【Q】extern放在函数的前面成为 函数声明的一部分,作用是什么?
【A】extern int f(); 和int f();没有明显区别。

【Q】当函数提供方单方面修改函数原型时,如果使用方不知情继续沿用原来的extern申明,这样编译时编译器不会报错。但是在运行过程中,因为少了或者多了输入参数,往往会造成系统错误,这种情况应该如何解决?
【A】 通常的做法是提供方在自己的xxx_pub.h中提供对外部接口的声明,然后调用方包含该头文件,从而省去extern这一步,以避免这种错误

extern "C"


【Q】在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?
【A】C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。

变量


extern定义变量


int a; // 定义一个全局变量a
int a =0;//定义一个全局变量a,并给初值。
extern int a =0 ;//定义一个全局变量a 并给初值。一旦给予赋值,一定是定义,定义才会分配存储空间。

extern声明变量


extern int a;// 声明一个全局变量a,声明之后不能直接使用这个变量,需要定义之后才能使用。

FAQ


【Q】在一个源文件中定义了一个数组: char a[6]; 是否可以在另一个文件中通过声明 extern char *a; 来访问该数组?
【A】不可以,指向类型T的指针并不等价于类型T的数组。extern char *a; 声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为 extern char a[ ];


extern与static



extern与include



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值