在c語言中,編譯器對於函式 int test()和int test(int a)的編譯結果得到的函式名是一樣的,所以c語言不能過載
而在c++中int test()和int test(int a)編譯後生成不同名字的函式,所以支援過載
1.這就產生了問題,如果在c++中呼叫c語言的int test(int a)函式,會連線錯誤,因為編譯後找不到對應名稱的函式(c和cpp生成的函式名不同)
所以需要在cpp檔案中如果要使用int test(int a)函式,需要在(include下面)用extern "c" int test(int a)
如果呼叫的c函式特別多,也可以用下面的方式宣告
extern "c"
或者extern "c"
2.如果要在.c檔案中需要呼叫cpp函式需要在.cpp檔案中用extern "c"
然後系統在編譯這個函式的時候就會自動按照c語言的規則進行編譯
3.如果要寫一套函式庫,同時提供給c和cpp使用,那必須用c語言規則進行編譯
如果是寫在cpp檔案中的,必須要加extern "c"宣告
--1.在cpp檔案中加上extern,讓函式編譯是用c規則編譯
--2.在呼叫者的cpp檔案中用extern "c"
4.但是3的實現比較麻煩,只要呼叫通用函式就得在呼叫者的cpp檔案中用extern引入標頭檔案
解決方法:在通用函式的.h和.cpp檔案中,都用extern來宣告--(但是此時就會讓c呼叫不了通用函式,因為c裡面沒有extern,c包含的標頭檔案包含extern,所以編譯通不過)
所以要在通用函式的.h檔案裡面用
#ifdef __cplusplus
extern "c"
#endif
因為cpp在編譯時會自動生成__cplusplus這個巨集,所以利用這一點,可以實現c檔案中不包含extern
cpp中包含extern
C 和 C 混合編譯簡述
一 extern c 的作用 最重點 1.extern c 的真實目的是實現類c和c 的混合程式設計。extern c 是由 提供的乙個連線交換指定符號,用於告訴 這段 是 函式。extern c 後面的函式不使用的c 的名字修飾,而是用c。這是因為c 編譯後庫中函式名會變得很長,與c生成的不一致,...
c和c 混合編譯的問題(extern C )
1.引言 c 語言的建立初衷是 a better c 但是這並不意味著c 中類似c語言的全域性變數和函式所採用的編譯和連線方式與c語言完全相同。作為一種欲與c相容的語言,c 保留了一部分過程式語言的特點 被世人稱為 不徹底地物件導向 因而它可以定義不屬於任何類的全域性變數和函式。但是,c 畢竟是一種...
C和C 的混合編譯 extern 「C」的使用
在實際程式設計中,有時會需要用到c c 的混合編譯,通過extern c 即可實現混合編譯,以下是個人參照的資料以及自己的實際操作的收穫。一 c 中呼叫c程式 中print函式通過extern c 來指明按照c的編譯方式來編譯,編譯完成執行結果如下 二 在c中呼叫c 程式,分三個檔案進行 1 cpp...