剛開始接觸gcc,g++編譯器時一直不太清楚具體的作用與區別,只是知道都可以編譯c++,今天覆習的時候湊著專門總結了一下:
(1)誤區一:gcc只能編譯c**,g++只能編譯c++;
事實上,兩者都可以,但是注意,以下幾點。
1、字尾是.c的,gcc把它當作c程式,而g++當作是c++程式;字尾為.cpp的,兩者都會認為是c++程式,注意,雖然c++是c的超集,但是兩者對語法要求是有區別的,例如:
如果按照c語言的語法規則,是沒有問題的,但是按照c++的語法規則立刻報錯;由此可見c++的語法規則更嚴謹一些;
2、編譯階段
g++會呼叫gcc,對於c++的**,兩者是等價的;但是因為gcc不能直接自動和c++的程式使用庫鏈結,所以通常用
g++來完成鏈結,為了統一,乾脆編譯/鏈結統統用g++了,這給人一種錯覺,好像cpp的檔案只能g++才能編譯似的;
(2)誤區二:gcc不會定義_cplusplus巨集,而g++會
實際上,這個巨集只是標誌著編譯器將會把**按照c還是c++語法來解釋,如上所述,如果字尾為.c,並且採用gcc編譯器,則該巨集就是未定義的,否則就是已定義;
(3)誤區三:編譯只能用gcc,鏈結只能用g++。
嚴格來說,這句話不算錯,但是它混淆了概念,應該這樣說:編譯可以用gcc/g++,而鏈結可以用g++或者gcc-lstdc++。因為gcc命令不能自動和c++程式使用的庫鏈結,所以通常使用g++來完成鏈結。但是在編譯階段,g++會自動呼叫gcc,二者等價。
(4)誤區四:extern "c"與gcc/g++有關係
並無關係!無論是gcc還是g++,用extern 「c」時,都是以c的命名方式來為symbol命名;否則,都是以c++方式命名。
gcc與g 的區別
gcc和g 都是gnu 組織 的乙個編譯器。誤區一 gcc只能編譯c g 只能編譯c 兩者都可以,但是請注意 1,字尾為.c的,gcc把它當作是c程式,而g 當作是c 程式 字尾為.cpp的,兩者都會認為是c 程式,注意,雖然c 是c的超集,但是兩者對語法的要求是有區別的。c 的語法規則更加嚴謹一些...
gcc與g 的區別
gcc和g 都是gnu 組織 的乙個編譯器。誤區一 gcc只能編譯c g 只能編譯c 兩者都可以,但是請注意 1,字尾為.c的,gcc把它當作是c程式,而g 當作是c 程式 字尾為.cpp的,兩者都會認為是c 程式,注意,雖然c 是c的超集,但是兩者對語法的要求是有區別的。c 的語法規則更加嚴謹一些...
gcc與g 的區別
gcc和g 都是gnu 組織 的乙個編譯器。誤區一 gcc只能編譯c g 只能編譯c 兩者都可以,但是請注意 1,字尾為.c的,gcc把它當作是c程式,而g 當作是c 程式 字尾為.cpp的,兩者都會認為是c 程式,注意,雖然c 是c的超集,但是兩者對語法的要求是有區別的。c 的語法規則更加嚴謹一些...