gcc 是GNU Compiler Collection,原名爲Gun C語言編譯器,因爲它原本只能處理C語言,但gcc很快地擴充套件,包含很多編譯器(C、C++、Objective-C、Ada、Fortran、 Java),可以說gcc是GNU編譯器集合。
g++ 是C++編譯器。
cc 是 Unix系統的 C Compiler,一個是古老的 C 編譯器。而 Linux 下 cc 一般是一個符號連線,指向 gcc;可以通過 $ ls -l /usr/bin/cc 來簡單檢視,該變數是 make 程式的內建變數,預設指向 gcc 。 cc 符號鏈接和變數存在的意義在於原始碼的移植性,可以方便的用 gcc 來編譯老的用cc編譯的Unix軟體,甚至連 makefile 都不用改在,而且也便於 Linux 程式在 Unix下 編譯。
CC 則一般是 makefile 裏面的一個名字標籤,即宏定義,表示採用的是什麼編譯器(如:CC = gcc)。
誤區一:gcc只能編譯C程式碼,g++只能編譯C++程式碼。
兩者都可以,但請注意:
(1)後綴爲.c的,gcc把它當作是C程式,而g++當作是c++程式;後綴爲.cpp的,兩者都會認爲是C++程式,注意,雖然C++是C的超集,但是兩者對語法的要求是有區別的。C++的語法規則更加嚴謹一些。
(2)編譯階段,g++會呼叫gcc,對於C++程式碼,兩者是等價的,但是因爲gcc命令不能自動和C++程式使用的庫鏈接,所以通常用g++來完成鏈接,爲了統一起見,乾脆編譯/鏈接統統用g++了,這就給人一種錯覺,好像cpp程式只能用g++似的。
誤區二:gcc不會定義__cplusplus宏,而g++會