C++程序要調用已經被編譯後的C函數

C++程序不能直接調用已編譯後的C函數的,這是因爲名稱問題,舉個例,一個函數叫做void foo(int x, int y),該函數被C編譯器編譯後在庫中的名字爲_foo,而C++編譯器則會產生像_foo_int_int之類的名字用來支持函數重載和類型安全連接,名稱就不一樣,因此不能直接調用的。那要調用的話怎麼辦呢? C++提供了一個C連接交換指定符號***extern“C”***來解決這個問題。

extern “C”  
{   
void foo(int x, int y);   
…// 其它函數  
}   
extern “C”  
{   
#include “myheader.h”  
…// 其它C頭文件  
}   

這就告訴C++編譯譯器,函數foo 是個C連接,應該到庫中找名字_foo而不是找_foo_int_int。

//test.h
#ifdef __cplusplus
#include <iostream>
using namespace std;
extern "C"
{
#endif
void mytest();
#ifdef __cplusplus
}
#endif

可以將mytest()的實現放在.c或者.cpp文件中,可以在.c或者.cpp文件中include "test.h"後使用頭文件裏面的函數,而不會出現編譯錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章