extern的用法解析

1 extern 关键字的基本作用

第一种用法:
在与"C"一起使用时,例如 extern "C" void fun(int a, int b),这告诉编译器在编译函数fun时按照C语言的规则进行编译,而不是C++的规则。C++对函数名的翻译可能导致fun这个名字变得面目全非,例如可能是fun@aBc_int_int#%$,具体取决于编译器的实现方式。为什么要这样做呢?因为C++支持函数的重载,这个问题不在此过多讨论,如果感兴趣可以进行网上搜索,相信你会找到满意的解释。

💡 告诉编译器用C的规则去编译这个函数!

第二种用法:
当extern不与"C"一起用于修饰变量或函数时,例如在头文件中 extern int g_Int,其作用是声明函数或全局变量的作用范围的关键字。声明的函数和变量可以在本模块或其他模块中使用,需要注意这是一个声明而不是定义。换言之,如果模块B想引用模块A中定义的全局变量或函数,只需包含A模块的头文件即可。在编译阶段,虽然模块B找不到该函数或变量,但不会报错;连接时会从模块A生成的目标代码中找到此函数。

💡 在A头文件中声明此变量或函数,则其他模块B包含A头文件后可直接使用此变量或函数,无需再在B中extern声明此变量或函数

第三种用法:
extern可以置于变量或函数前,以标示变量或函数的定义在其他文件中,从而提示编译器在其他模块中寻找其定义。此外,extern也可用于进行链接指定。

💡 若模块B想在不包含A头文件的前提下直接使用A的变量或函数,就需要单独使用extern type func();来声明。然而这种做法是不推荐的,详见下方解释。

2 注意!extern 声明</

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值