在編譯原始檔時,c編譯器和c++編譯器都會對符號(函式或變數)名作某些修正,但兩者採用的修正方法不同,所以兩者生成的目標檔案不能互相鏈結。
在c++中使用extern "c"可以讓c++符號獲得c鏈結特性。由於c++編譯器會自動定義__cplusplus巨集,所以在c語言標頭檔案中採用這種結構可以保證無論使用何種編譯器,生成的目標檔案都具有c鏈結特性,能夠與標準c編譯器所生成的目標檔案相鏈結。通常c/c++編譯器會根據檔案字尾來選擇符號修正,所以最好把c的**放到.c檔案中,把c++的**放到.cpp檔案中。
用vc++6.0建立動態庫
在test.cpp中輸出c函式,如下:
1、新建win32 dynamic-link library
2、輸出函式extern "c" _declspec(dllexport) void far test(); void far test()
而在test.c中輸出c函式,就可以這樣,如下:
1、新建win32 dynamic-link library
2、輸出函式_declspec(dllexport) ...
c和 cpp的區別
c和.cpp的大致區別很明顯就能看出來,乙個表示c的源程式,乙個表示c 的源程式,那麼我們今天結合gcc g 來看一下它們的區別。localhost test cat test.c includevoid func int main localhost test 結果 注 c檔案和.cpp檔案的內容...
h 和 cpp的區別
include該hpp檔案即可,無需再將cpp加入到project中進行編譯。而實現 將直接編譯到呼叫者的obj檔案中,不再生成單獨的obj,採用hpp將大幅度減少呼叫 project中的cpp檔案數與編譯次數,也不用再發布煩人的lib與dll,因此非常適合用來編寫公用的開源庫。hpp的優點不少,但...
h和 cpp檔案的區別
c 2009 11 21 22 10 關於標頭檔案和原始檔的分別 首先,我們可以將所有東西都放在乙個.cpp檔案內.然後編譯器就將這個.cpp編譯成.obj,obj是什麼東西?就是編譯單元了.乙個程式,可以由乙個編譯單元組成,也可以有多個編譯單元組成.如果你不想讓你的源 變得很難閱讀的話,就請使用多...