這兩個是在研究一個開源軟件的源碼時發現的。之前未見過,所以好好研究了一下。
extern "C":告訴C++編譯器,在鏈接時使用C的方法。
因為C++有可以重載函數,但C沒有。所以C++編譯器在鏈接時就不能以函數名作為唯一的
標識去鏈接實現的代碼,它會將函數名與參數混在一塊產生一個唯一的標識。而C就不用這樣,所以如果聲明了extern "C",C++編譯器就不會在鏈接的時候加上參數等信息了。
我碰到的這個char[]初始化的問題其實到現在并沒有想明白,期待高手解答。源碼是
所以,最后的結果是:
extern "C":告訴C++編譯器,在鏈接時使用C的方法。
因為C++有可以重載函數,但C沒有。所以C++編譯器在鏈接時就不能以函數名作為唯一的
標識去鏈接實現的代碼,它會將函數名與參數混在一塊產生一個唯一的標識。而C就不用這樣,所以如果聲明了extern "C",C++編譯器就不會在鏈接的時候加上參數等信息了。
我碰到的這個char[]初始化的問題其實到現在并沒有想明白,期待高手解答。源碼是
const char version[] = " version " VERSION "." SUBVERSION "." MINORVERSION;
其中VERSION,SUBVESION,MINOVERSION是在Makefile中定義的,并在gcc編譯時加入-D參數指定。值分別為:"0","8","0"所以,最后的結果是:
const char version[] = " version " "0" "." "8" "." "0";
這種初始化方法我用程序驗證過,是可行的。最后的就是一個完整的字符串"version 0.8.0"。不明白這種方法,望指教。