前陣子被問及一個(gè)在C中如何調(diào)用C++函數(shù)的問題,當(dāng)時(shí)簡(jiǎn)單回答是將函數(shù)用extern"C"聲明,當(dāng)被問及如何將類內(nèi)成員函數(shù)聲明時(shí),一時(shí)語(yǔ)塞,江蘇會(huì)計(jì)證考試報(bào)名,2022年會(huì)計(jì)從業(yè)資格考試報(bào)名,2022年江蘇會(huì)計(jì)從業(yè)證報(bào)名,2022年江蘇會(huì)計(jì)從業(yè)考試報(bào)名,江蘇2022年會(huì)計(jì)從業(yè)資格考試成報(bào)名,2022年江蘇會(huì)計(jì)從業(yè)考試,會(huì)計(jì)電算化考試試題,2022年江蘇會(huì)計(jì)電算化,江蘇會(huì)計(jì)電算化試題,江蘇會(huì)計(jì)電算化考試,江蘇初級(jí)會(huì)計(jì)電算化,江蘇初級(jí)會(huì)計(jì)電算化考試">

射精一区欧美专区|国产精品66xx|亚洲视频一区导航|日韩欧美人妻精品中文|超碰婷婷xxnx|日韩无码综合激情|特级黄片一区二区|四虎日韩成人A√|久久精品内谢片|亚洲成a人无码电影

您現(xiàn)在的位置:首頁(yè) > IT認(rèn)證 > 軟件水平 >

軟考程序員輔導(dǎo):c中如何調(diào)用c++函數(shù)


2012年軟考程序員輔導(dǎo):c中如何調(diào)用c++函數(shù)

C中如何調(diào)用C++函數(shù)?


  前陣子被問及一個(gè)在C中如何調(diào)用C++函數(shù)的問題,當(dāng)時(shí)簡(jiǎn)單回答是將函數(shù)用extern"C"聲明,當(dāng)被問及如何將類內(nèi)成員函數(shù)聲明時(shí),一時(shí)語(yǔ)塞,后來網(wǎng)上查了下,網(wǎng)上有一翻譯C++之父的文章可以作為解答,遂拿來Mark一下。


  將C++函數(shù)聲明為``extern"C"''(在你的C++代碼里做這個(gè)聲明),然后調(diào)用它(在你的C或者C++代碼里調(diào)用)。例如:


  //C++code:


  extern"C"voidf(int);


  voidf(inti)


  {


  //…


  }


  然后,你可以這樣使用f():


  /*Ccode:*/


  voidf(int);


  voidcc(inti)


  {


  f(i);


  /*…*/


  }


  當(dāng)然,這招只適用于非成員函數(shù)。如果你想要在C里調(diào)用成員函數(shù)(包括虛函數(shù)),則需要提供一個(gè)簡(jiǎn)單的包裝(wrapper)。例如:


  //C++code:


  classC


  {


  //…


  virtualdoublef(int);


  };


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


  {


  returnp->f(i);


  }


  然后,你就可以這樣調(diào)用C::f():


  /*Ccode:*/


  doublecall_C_f(structC*p,inti);


  voidccc(structC*p,inti)


  {


  doubled=call_C_f(p,i);


  /*…*/


  }


  如果你想在C里調(diào)用重載函數(shù),則必須提供不同名字的包裝,這樣才能被C代碼調(diào)用。例如:


  //C++code:


  voidf(int);


  voidf(double);


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


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


  然后,你可以這樣使用每個(gè)重載的f():


  /*Ccode:*/


  voidf_i(int);


  voidf_d(double);


  voidcccc(inti,doubled)


  {


  f_i(i);


  f_d(d);


  /*…*/


  }


  注意,這些技巧也適用于在C里調(diào)用C++類庫(kù),即使你不能(或者不想)修改C++頭文件。

相關(guān)文章

無(wú)相關(guān)信息
更新時(shí)間2022-03-13 11:10:58【至頂部↑】
聯(lián)系我們 | 郵件: | 客服熱線電話:4008816886(QQ同號(hào)) | 

付款方式留言簿投訴中心網(wǎng)站糾錯(cuò)二維碼手機(jī)版

客服電話: