当前所在位置:珠峰网资料 >> 计算机 >> 软件水平 >> 正文
2015年软件水平考试程序员辅导笔记之C中如何调用C++函数
发布时间:2012/6/6 16:40:19 来源:城市网学院 编辑:ziteng
  -
  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); [NextPage]   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++头文件。

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved