前陣子被問及一個在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同號) | 

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

客服電話:




主站蜘蛛池模板: 女孩们在线观看| 陈诗雅韩国| 啼笑姻缘| 珊瑚海 歌词| 女子露胸| 妻乳| 欧美gv网站| 东莞回忆录| 镍多少钱一公斤| 两人生猴子免费观看完整版视频| 挤黑头视频 鼻子| 如懿传 豆瓣| 最后的招待1991| 尤勇智的个人资料简介| 苹果恋爱多| 人流后吃什么| 窗前| 许华升公个人资料身高多少| 大尺度床戏韩国| cctv16直播| 《魔女之旅》动漫| 赖小子| 电影交换| 张国立主演电视剧全剧大全免费观看| 成全免费观看高清电影大侦探| 金珠韩国电影| 叶凯薇的视频| 绿椅子在线| 爱爱内含光电视剧结局在线观看| 战狼7| 假如我是一坨屎作文| 熊乃瑾个人资料| 丁尼| 张月个人资料| 妈妈的朋友朴银狐| 烽火流金电视剧免费观看完整版| 逛新城原唱| 我的幸福婚约电影| 读书笔记经典常谈| 意大利诱惑| 刘越|