前陣子被問及一個在C中如何調用C++函數的問題,當時簡單回答是將函數用extern"C"聲明,當被問及如何將類內成員函數聲明時,一時語塞,江蘇會計證考試報名,2022年會計從業資格考試報名,2022年江蘇會計從業證報名,2022年江蘇會計從業考試報名,江蘇2022年會計從業資格考試成報名,2022年江蘇會計從業考試,會計電算化考試試題,2022年江蘇會計電算化,江蘇會計電算化試題,江蘇會計電算化考試,江蘇初級會計電算化,江蘇初級會計電算化考試">

免费看欧美黑人毛片-免费看毛片网站-免费看毛片的网站-免费看久久-中文字幕日韩欧美-中文字幕日韩精品一区

您現在的位置:首頁 > IT認證 > 軟件水平 >

軟考程序員輔導:c中如何調用c++函數


2012年軟考程序員輔導:c中如何調用c++函數

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++頭文件。

相關文章

無相關信息
更新時間2022-03-13 11:10:58【至頂部↑】
聯系我們 | 郵件: | 客服熱線電話:4008816886(QQ同號) | 

付款方式留言簿投訴中心網站糾錯二維碼手機版

客服電話:




主站蜘蛛池模板: 第一序列第二季上映了吗| 多田有花与老丈人电影叫什么名字| 炖鲫鱼汤怎么做好喝又营养视频| 欧美一级毛片免费视频| 翟小兴演过的电视剧大全| 《救苦经》念诵| 冬日行动电影免费观看| 黎明电影| 番金连| 五月天诺亚方舟| 食人鱼电影| 饥渴女人的外遇| 啊啊视频| 黄金地带电视剧免费观看| 大器晚成第三季| 建设工程档案归档整理规范| 祈使句怎么改| 一个蛋挞的热量| 日韩欧美动作影片| 《侏罗纪公园1》电影免费观看| 拆迁补偿合同| 拔萝卜电影版| 董璇惊艳写真| 王牌御史| 汤唯和梁朝伟拍戏原版| 标准体重| 包青天之真假包公| 爱在记忆中找你歌词| 快播电影网| 早餐中国| 经典常谈阅读笔记| 1905电影网| 哥哥女人| 掐脖子的视频| 欧美17p| 双男主动漫 推荐| 《战长沙》电视剧| 情侣签名一男一女简短| 一野| 内蒙古电视台节目表| 拿什么拯救你我的爱人演员表介绍|