extern "C"的用途及原理

本文详细介绍了extern "C"关键字在C++中的作用,主要用于解决C++和C语言间函数调用的兼容问题。通过举例分析,解释了在C++调用C语言模块和C语言调用C++模块时,extern "C"如何确保正确链接和调用函数。

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

    最近在准备找工作,看到了不少面试题都会考察到c++中extern “C”关键字的应用,原来对这个关键字的应用不多,所以对其原理和用途也不是很清楚,现在遇到了这方面的题目,所以下决心要把这个问题搞懂,通过查阅资料以及代码实验,对这个关键字的应用有了一些心得,特分享如下。

    extern关键字,大家应该都比较熟悉,主要是在声明变量的时候用,加上extern关键字,就说明这个变量可以被其它模块访问,比如头文件A.h中声明一个变量为extern int  a;在源文件A.cpp中有一个全局变量为int a;而在源文件B.cpp中需要访问A.cpp源文件中的全局变量a,就需要包含头文件A.h,然后就可以在连接的时候找到A.cpp生成的目标文件A.obj中的符号a。

    extern “C”(注意,这个C一定要大写)关键字主要是为了实现c++和c语言所写的不同模块间的互相调用而设计的。c++作为c的超集,支持了函数重载,重载的函数可以通过形参的类型进行区别,调用的时候会根据实参的类型自动匹配调用,其内部实现的原理大概是这样的。


比如有两个函数int add(int a, int b)和double add(double a, double b),它们是重载函数,在编译的时候c++编译器就会生成不同的函数名,对应它们的分别为

_add_int_int(int  a, int b)   和 _add_double_double(double a, double b),所以重载后的函数还是可以区分的,而c语言是不支持重载的,所以在c中 int add(int a, int b)生成的函数名还是_add,如果一个模块是用c++语言写的,另一个模块是c语言写的,在函数调用的时候,由于在.obj文件中生成的函数名机制不一样,就会出现调用出错的情况。extern “C”就是为了解决这个问题而设计的。


我们通过例子来进行讲解,分为两种情况:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值