国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

C++中是如何调用C接口的?

发布时间:2019/08/28标签:   函数    点击量:

原标题:C++中是如何调用C接口的?
怎样在C++代码中挪用写好的C接口?你能够会惊奇,C++不是兼容C吗?间接挪用不便可以了?这里咱们先按下不表,先看看C++怎样挪用C代码接口。C++/C接口C++怎样挪用C接口为甚么会有如许的情形呢?设想一下,有些接口是用C完成的,并供给了库,那末C++中该怎样应用呢?咱们先不做任何差别看待,看看一般情形下会产生甚么意想不到的事件。起首供给一个C接口:#include"test.h"voidtestCfun(){printf("Iamcfun\n");return;}为了简化,咱们在这里就不将它做成动态库或许静态库了,咱们在这里编译成C目的文件:gcc-ctest.c别的供给一个头文件test.h:#includevoidtestCfun();咱们的C++代码挪用以下:#include"test.h"#includeusingnamespacestd;intmain(void){/*挪用C接口*/cout<<"starttocallcfunction"<<><>编译:$g++-omainmain.cpptest.o/tmp/ccmwVJqM.o:Infunction`main':main.cpp:(.text+0x21):undefinedreferenceto`testCfun()'collect2:error:ldreturned1exitstatus很可怜,最初的链接报错了,说找不到testCfun,然而咱们确切界说了这个函数。为甚么会找不到呢?当初你还会以为C++间接便可以挪用C接口了吗?本相咱们都晓得,C++中函数支撑重载,而C并不支撑。C++为了支撑函数重载,它在“天生”函数标记信息时,不能仅仅经过函数名,由于重载函数的函数名都是一样的,以是它还要依据入参,定名空间等信息来断定独一的函数署名。或许说C++天生函数署名的方法与C纷歧致,以是即使是函数名一样,关于C和C++来讲,它们终极的函数署名仍是纷歧样。固然这里又是别的一回事了,咱们不细说。咱们看看两个文件里的函数标记有甚么差别:$nmtest.o|greptestCfun0000000000000000TtestCfun$nmmain.o|greptestCfunU_Z8testCfunv以是它们两个能链接在一同才真是惊奇了呢!名字都差别,还怎样链接?怎样处置那末怎样处置呢?很明显,咱们必需告知链接器,这是一个C接口,而不是C++接口,以是须要参加 extern C,咱们修正test.h#includeextern"C"{voidtestCfun();}这里用extern "C"将testCfun接口包裹起来,告知编译器,这里的是C代码哈,你要按C代码的方法处置。再次编译:$g++-omainmain.cpptest.o$./mainstarttocallcfunctionIamcfunendtocallcfunction看终端输入,完善!优化固然下面的C接口能够被C++畸形挪用了,然而假如这个C接口要被代码挪用呢?增添main.c内容以下//main.c#include"test.h"intmain(void){/*挪用C接口*/testCfun();return0;}

版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号