1 :兩者都能編譯C和C++代碼,但是有區(qū)別:
(1)后綴為.c的,GCC把它當(dāng)成是C程序,而g++當(dāng)作是c++程序;后綴為.cpp的,兩者都會(huì)認(rèn)為是c++程序。值得注意的是,雖然c++是c的超集,但兩者對(duì)語(yǔ)法的要求不同。C++的語(yǔ)法規(guī)則更加嚴(yán)謹(jǐn)一些。
(2).編譯階段,g++會(huì)調(diào)用GCC,對(duì)于c++代碼,兩者是等價(jià)的,但是因?yàn)镚CC命令不能自動(dòng)和C++程序使用的庫(kù)聯(lián)接,所以通常用g++來(lái)完成鏈接,為了統(tǒng)一起見(jiàn),干脆編譯/鏈接統(tǒng)統(tǒng)用g++了,這就給人一種錯(cuò)覺(jué),好像cpp程序只能用g++似的。
2 :對(duì)于__cplusplus宏,實(shí)際上,這個(gè)宏只是標(biāo)志著編譯器將會(huì)把代碼按C還是C++語(yǔ)法來(lái)解釋?zhuān)缟纤觯?b>如果后綴為.c,并且采用GCC編譯器,則該宏就是未定義的,否則,就是已定義。
3 :編譯可以用GCC/g++,而鏈接可以用g++或者GCC -lstdc++。因?yàn)镚CC命令不能自動(dòng)和C++程序使用的庫(kù)聯(lián)接,所以通常使用g++來(lái)完成聯(lián)接。但在編譯階段,g++會(huì)自動(dòng)調(diào)用GCC,二者等價(jià)。
其實(shí)使用g++更省事,因?yàn)?c文件g++會(huì)自動(dòng)調(diào)用GCC。