如何解决C和C++互相调用的问题

 我来答
千锋教育
2017-01-07 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
在实际工作中可能经常要进行C和C++的混合编程,C++调用C语言的代码通常都比较容易,但也有一些细节需要注意。C要调用C++的代码就略为麻烦一些,因为C不支持面向对象的特征。 1,首先我们来看一下C++调用C语言的代码。要让你的C代码既能被C代码又能被C++调用虽说容易,但是还是有需要注意的地方。现有三个文件分别如下:[cpp]#ifndef TESTC_H#defineTESTC_H#ifdef__cplusplus //2个下划线extern"C"{#endifintadd(inta, intb);#ifdef__cplusplus}#endif#endif[cpp]#include "TestC.h"intadd(inta, intb){return(a+b);}[cpp]#include#include"TestC.h"intmain(){printf("add=%d\n" ,add(2,5));return0;}说明: file TestC.h是C的头文件,file TestC.c是其实现文件,file TestCpp.cpp是调用C函数的C++文件。文件TestC.h中的TESTC_H定义是为了头文件保护,”#ifdef__cplusplus ”这个不能缺少,你可以去查看C的标准库头文件中都有这个,如”stdio.h”。有了这个宏编译器就知道现在是C还是C++在调用它。 C编译器编译后在符号库中的名字为_add,而C++编译器则会产生像_add_int_int之类的名字。C++正是依靠这种机制实现了函数的重载。 extern关键字表示将函数或变量声明为全局类型,与之相对应的是static。static限定函数或变量的作用域为本文件。extern还有一个作用就是与”C”连在一起使用,即extern“C”通知编译器将extern “C”所包含的代码按照C的方式编译和链接。 intb){return(a+b);}}; 将C++类封装为C函数的文件(为了简略也将声明和实现放在了同一个文件中)如下:[cpp]#include"TestClass.h"extern"C"intadd_cpp(inta, intb);intadd_cpp(inta, intb){ADDs;return s.add(a,b) ;} 实际调用C++代码的C文件如下:[cpp]#includeexternintadd_cpp(inta, intb);intmain(){printf("add_cpp=%d\n" ,add_cpp(2,5));return0;} 上面的过程很清晰,就是用一个函数将C++类的使用封装起来,然后将它外部声明为C函数就可以了。文件TestClass.h定义并实现了一个类,该类只有一个add方法。文件TestCpp.cpp定义并实现了一个函数add_cpp,函数中定义了一个HJH类对象并调用了该对象的add方法。然后将add_cpp函数进行外部声明为C。 TestC.c文件中为了使用add_cpp函数,也需要进行外部声明。这是为了通知编译器说明这个函数是在其他文件中实现(注意在C文件中的extern后面不可加”C” )。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式