C与C++文件的相互引用

         在工作中总是会面对一些纯C的驱动程序,但是,有时候想通过一些已经熟练使用的,或者说是已经成型的代码框架中很好的模块,去配合驱动完成任务,这个时候有一个问题会出现在我们面前,就是.cpp文件需要引用纯c的函数,该怎么办?

    这个时候,就需要对纯C的函数添加相应的外壳,下面我举个例子:

Driver.c文件中:
void InitHS(int Handle);		///< 举个例子的函数,并没有什么真实的意义

    但是我需要用一个例如Test.cpp文件去引用这个函数,怎么办?需要进行如下处理:

Driver.c
需要修改成:
#ifdef __cplusplus
extern "C" {
#endif

void InitHS(int Handle)
#ifdef __cplusplus
}
#endif

    这样的处理完成后,就可以让C++的编译器顺利的完成编译。 

    对于这样用法的原因:因为C++提供的重载机制,重载机制的出现,使得函数在编译过程中,并不单单是函数名那么简单,编译器本身会添加一些其他的信息,但是对于C的编译器就不会出现这种情况,因为C不支持重载,即一个函数名包括其参数列表表示一个函数,不会有歧义。

    对于C++编译器, 由于__cplusplus宏被定义, 因此通过extern "C"来通知C++编译器编译后的代码是按照C的obj文件格式编译的,要连接的话按照C的命名规则去找.。

    简单的说,如果使用者分不清代码会被谁调用,那么请在这段代码上添加这个外壳。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值