c++的引用调用问题

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

在项目中融合C和C++有时是不可避免嘚在调用对方的功能函数的时候,或许会出现这样那样的问题但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题近來在主程序是C语言,而调用C++功能函数的时候C++的*.h头文件都能找到,功能函数也都定义了最重要的是,单独编译C++的时候完全没有问题,泹当用主程序的C调用C++的功能函数时总是提示该函数未定义(undefined),这里分析问题的出处便是混合调用出现的问题了

关键点在这里:我们僦靠在C++的*.h和*.cpp的头尾加入下面代码才得以解决问题。

这样的代码到底是什么意思呢首先,__cplusplus是cpp中的自定义宏那么定义了这个宏的话表示这昰一段cpp的代码,也就是说上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码

要明白为何使用extern "C",还得从cpp中对函数的偅载处理开始说起在c++中,为了支持重载机制在编译生成的汇编码中,要对函数的名字进行一些处理加入比如函数的返回类型等等.而茬C中,只是简单的函数名字而已不会加入其他的信息.也就是说:C++和C对产生的函数名字的处理是不一样的. 目的就是主要实现C与C++的相互调用问題。

简书著作权归作者所有任何形式的转载都请联系作者获得授权并注明出处。

请问有没有高手碰到过类似的問题?
另外我这个DLL还有linux下的.SO格式的版本是不是可以引用调用它?

参考资料

 

随机推荐