在C文件中调用C++代码---笔记

本文介绍了如何在C文件中调用C++代码,包括两种情况的分析:不涉及面向对象特性和涉及面向对象特性的场景。对于后者,通过创建包裹函数实现C到C++的调用。详细讨论了extern C宏和编译器处理类的方式。
摘要由CSDN通过智能技术生成
背景:

我们提供的so库中,代码是纯 c++ 代码,里面包含了cpp 的各种特性:类、虚函数等等。但是由于客户平台原因,他们使用的是纯 C 语言,也就是代码文件的后缀也是以 “.c” 结尾的。他们需要在 C 文件中调用我们库里面的 CPP 接口,在编译的时候,编译器一直报找不到接口。

第一次尝试:

通过在我们的 CPP 代码里面加 “extern c” 的方式,错误如故;

第二次尝试:

新创建一个 CPP 文件,在该文件里面以 C 语言的风格,封装调用一次我们 CPP SO 库里面的接口(包括实例化对象等等),然后客户在他们的C文件中,调用进一步封装过后的接口,问题解决。这种解决方法,也就是网络上到处使用的包裹函数方法

分析

浅分析一下:C 语言里面是没有面向对象的特性,而 CPP 里面是有的。CPP 向下兼容 C 语言特性,但是 C 并不兼容 CPP 特性。

第一种情况

如果CPP不涉及到面向对象方面的东西(也就是类等等特性),其实就是一种类 C 语言的风格,这个时候,使用 “extern C” 和 “__cplusplus” 宏就可以完成 C 文件里面的代码可以直接调用 CPP 文件里面的代码

第二种情况

而如果涉及到了类、虚函数等等 CPP 特性的东西,单独靠 “extern C” 和 “__cplusplus” 宏是搞不定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值