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

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 01:32:11
如何解决C和C++互相调用的问题

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

如何解决C和C++互相调用的问题
在实际工作中可能经常要进行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”
).

如何解决C和C++互相调用的问题 c如何调用C++ android如何调用c C语言,多文件问题.有a.c/b.c和c.c在B里定义了一个I全局变量,A和C里没有声明,那么,B里的这个变量是每调用到它里面的函数它都被定义,调用完再释放掉.还是说这个变量在程序运行的时候一直是 如何解决一元一次方程的行程问题和环形问题? 问一个思维逻辑问题假如A和B互相排斥,B和C互相排斥那么A和C互相排斥吗 编写以下功能函数:1、求两个数的和2、求两个数的差3、 求两个数的积 并在主函数中进行调用.尽量用C-Free解决 C语言 谁能用函数调用的方式实现矩形周长和面积的计算. C语言题目:写一个求最大公约数和最小公倍数的函数.并调用函数. 请问C语言中函数定义,函数声明和函数调用的区别? 10.一个C程序由函数A(),B(),C()和函数P()构成,在函数A()中分别调用了函数B()和函数C(),在函数B()中调用了函数A(),且在函数P()中也调用了函数A(),则可以说( A ).A、函数B()中调用的函数A()是函数A()的 如何解决通货膨胀的问题? 如何解决“三个和尚没水喝”的问题? 如何解决人多地少的问题 数据库试题一、单项选择题(共20题,100分) 1、在DBS中,DBMS和OS之间的关系是________ A)相互调用 B)DBMS调用OS C)OS调用DBMS D 中共七届二中全会需要解决的重要问题是A.如何夺取全国革命胜利 B.如何解决民主革命遗留的任务的问题C.党的工作重心转移问题 D.民主革命向社会主义革命转变的问题 应该怎么画波的叠加...以及如何将c波和d波互相干涉画出八组位移 c语言 调用函数求一个数组的中位数