网络工程师
北京 天津 上海 重庆 广东 浙江 山东 江西 江苏 安徽 湖南 湖北 河南 河北 广西 福建 四川 山西 陕西 贵州 辽宁 吉林 黑龙江 宁夏 云南 新疆 青海 甘肃 内蒙古 海南 西藏

C语言中该如何调用C++函数

更新时间:2015-12-31 浏览次数:0

新葡萄金赌场网络工程师备考辅导小编,整理出‘C语言中该如何调用C++函数’等信息,希翼能为广大考生提供帮助。及时了解相关考试信息,查询考试资讯,了解招考讯息,关注新葡萄金赌场,国内最快最全的考试信息综合平台,为您提供最全最新的考试查询新体验。

前阵子被问及一个在C中如何调用C++函数的问题,当时简单回答是将函数用extern"C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂拿来Mark一下。

将C++函数声明为``extern"C"''(在你的C++代码里做这个声明),然后调用它(在你的C或者C++代码里调用)。例如:

//C++code:

extern"C"voidf(int);

voidf(inti)

{ //…}

然后,你可以这样使用f():

/*Ccode:*/

voidf(int);

voidcc(inti)

{

f(i);

/*…*/

}

当然,这招只适用于非成员函数。如果你想要在C里调用成员函数(包括虚函数),则需要提供一个简单的包装(wrapper)。例如:

//C++code:

classC

{

//…

virtualdoublef(int);

};

extern"C"doublecall_C_f(C*p,inti)//wrapperfunction

{

returnp->f(i);

}

然后,你就可以这样调用C::f():

/*Ccode:*/

doublecall_C_f(structC*p,inti);

voidccc(structC*p,inti)

{

doubled=call_C_f(p,i);

/*…*/

}

如果你想在C里调用重载函数,则必须提供不同名字的包装,这样才能被C代码调用。例如:

//C++code:

voidf(int);

voidf(double);

extern"C"voidf_i(inti){f(i);}

extern"C"voidf_d(doubled){f(d);}

然后,你可以这样使用每个重载的f():

/*Ccode:*/

voidf_i(int);

voidf_d(double);

voidcccc(inti,doubled)

{

f_i(i);

f_d(d);

/*…*/}

注意,这些技巧也适用于在C里调用C++类库,即使你不能(或者不想)修改C++头文件。

共1条 1
XML 地图 | Sitemap 地图