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