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,那也可以调用的,但是那还是属于 *** 作系统提供的功能,并不是语言本身的特性(至少不是语言的国际标准定义的)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)