C程序如何调用C++接口?

C程序如何调用C++接口?,第1张

C++

函数声明为``extern

"C"''(在你的

C++

代码里做这个声明),然后调用它(在你的

C

或者

C++

代码里调用)。例如:

//

C++

code:

extern

"C"

void

f(int)

void

f(int

i)

{

//

...

}

然后,你可以这样使用

f():

/*

C

code:

*/

void

f(int)

void

cc(int

i)

{

f(i)

/*

...

*/

}

当然,这招只适用于非成员函数。如果你想要在

C

里调用成员函数(包括虚函数),则需要提供一个简单的包装(wrapper)。例如:

//

C++

code:

class

C

{

//

...

virtual

double

f(int)

}

extern

"C"

double

call_C_f(C*

p,

int

i)

//

wrapper

function

{

return

p->f(i)

}

然后,你就可以这样调用

C::f():

/*

C

code:

*/

double

call_C_f(struct

C*

p,

int

i)

void

ccc(struct

C*

p,

int

i)

{

double

d

=

call_C_f(p,i)

/*

...

*/

}

如果你想在

C

里调用重载函数,则必须提供不同名字的包装,这样才能被

C

代码调用。例如:

//

C++

code:

void

f(int)

void

f(double)

extern

"C"

void

f_i(int

i)

{

f(i)

}

extern

"C"

void

f_d(double

d)

{

f(d)

}

然后,你可以这样使用每个重载的

f():

/*

C

code:

*/

void

f_i(int)

void

f_d(double)

void

cccc(int

i,double

d)

{

f_i(i)

f_d(d)

/*

...

*/

}

注意,这些技巧也适用于在

C

里调用

C++

类库,即使你不能(或者不想)修改

C++

头文件

API就是接口的意思,API也可以单纯的理解为函数。

不管哪种语言调用接口都需要引入相应的包,比如C或C++中调用Windows的接口

需要include "windows.h"的头文件,才可以调用系统的接口

如果第三方或是自已提供的接口,则同样包含头文件是首先要做的工作。换种理解,因为接口的定义就包含在这些头文件中,如果不引入将提示未定义的函数。

接着下一步进行调用,API成千上万个,有目的的使用接口是关键,这些接口在头文件中都有相应的名称,比如system函数

如果你调用第三方的接口,比如天气预报,同样会有一个头文件,里面有大量的接口,看官方文档说明进行调用,而那些函数名称也都是第三方起的,随便举个例子可能叫get_weather_report(location)

调用API接口其实只是一个概念,在开发中无数次要重复的一个小小的过程。

C++程序可以调用C语言的代码库,我以前编写过的一个C++爬虫就调用过cJSON这个C语言库;但是C语言程序严格来讲是调用不了C++代码库的接口的,因为C标准兼容不了C++代码,即使C++库的接口形式是C函数,而且符合C标准,但是实际上编译时还是需要C++编译器(那实际上相当于在编译C++程序),编译这一关还是过不了,而且这样还丧失了移植性。

不过,如果C++库是二进制形式的,而且有C形式的接口,比如是一个Windows的dll,那也可以调用的,但是那还是属于 *** 作系统提供的功能,并不是语言本身的特性(至少不是语言的国际标准定义的)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8104044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存