c++程式中呼叫被c編譯器編譯後的函式,為什麼要加extern 「c」?
c++語言支援函式過載,c語言不支援函式過載。函式被c++編譯後在庫中的名字與c語言的不同。假設某個c 函式的宣告如下:
void foo(int x, int y);
該函式被c 編譯器編譯後在庫中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字用來支援函式過載和型別安全連線。由於編譯後的名字不同,c++程式不能直接呼叫c 函式。c++提供了乙個c 連線交換指定符號extern「c」來解決這個問題。例如:
extern 「c」
或者寫成
extern 「c」
這就告訴c++編譯譯器,函式 foo 是個c 連線,應該到庫中找名字_foo 而不是找_foo_int_int。c++編譯器開發商已經對c 標準庫的標頭檔案作了extern「c」處理,所以我們可以用#include 直接引用這些標頭檔案。
如何在C 中呼叫C程式
c 和c是兩種完全不同的編譯鏈結處理方式,如果直接在c 裡面呼叫c函式,會找不到函式體,報鏈結錯誤。要解決這個問題,就要在 c 檔案裡面顯示宣告一下哪些函式是c寫的,要用c的方式來處理。1.引用標頭檔案前需要加上 extern c 如果引用多個,那麼就如下所示 extern c 然後在呼叫這些函式之...
如何在C 中呼叫C程式?
c 和c是兩種完全不同的編譯鏈結處理方式,如果直接在c 裡面呼叫c函式,會找不到函式體,報鏈結錯誤。要解決這個問題,就要在 c 檔案裡面顯示宣告一下哪些函式是c寫的,要用c的方式來處理。1.引用標頭檔案前需要加上 extern c 如果引用多個,那麼就如下所示 extern c 然後在呼叫這些函式之...
如何在C 中呼叫C程式?
c 和c是兩種完全不同的編譯鏈結處理方式,如果直接在c 裡面呼叫c函式,會找不到函式體,報鏈結錯誤。要解決這個問題,就要在 c 檔案裡面顯示宣告一下哪些函式是c寫的,要用c的方式來處理。1.引用標頭檔案前需要加上 extern c 如果引用多個,那麼就如下所示 extern c 然後在呼叫這些函式之...