ggg的區別

三大區別

  • GNU是一個軟件項目名。它開發了許多應用程序。

  • GCC全稱 GNU C Compiler, 最早的時候就是一個c編譯器。
  • 後來這個項目裏邊集成了更多其他不同語言的編譯器,
  • GCC就代表 the GNU Compiler Collection,一堆編譯器合集。

  • G++則是GCC的c++編譯器

有一篇

  • GCC:GNU Compiler Collection,它可編譯C、C++、JAV、Fortran、Pascal、Object-C、Ada

  • gcc是GCC中的GUN C Compiler(C 編譯器)
  • g++是GCC中的GUN C++ Compiler(C++編譯器)

  • gcc和g++並不是編譯器,也不是編譯器的集合,只是一種驅動器,

  • 根據參數中要編譯的文件的類型,調用對應的GUN編譯器

  • gcc編譯一個c文件的話,以下幾步:

  • Step1:Call a preprocessor, like cpp.

  • Step2:Call an actual compiler, like cc or cc1.

  • Step3:Call an assembler, like as.

  • Step4:Call a linker, like ld

  • 編譯器是可更換的,所以gcc不僅僅可以編譯C文件

  • 更準確:gcc調用了C compiler,g++調用了C++ compiler

gcc和g++的主要區別

  • .c和.cpp,gcc分別當做c和cpp文件編譯(c和cpp語法強度是不一樣)
  • .c和.cpp,g++統一當做cpp編譯
  • g++編譯文件時,g++會自動鏈接標準庫STL,gcc不會自動鏈接STL
  • gcc在編譯C文件時,可用的預定義宏少
  • gcc在編譯cpp文件時/g++在編譯c文件和cpp文件時(這時候gcc和g++調用的都是cpp文件的編譯器),會加入一些額外宏
#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern 6 
  • 用gcc編譯c++時,爲能用STL,需加參數–lstdc++ ,這並不代表 gcc –lstdc++ 和 g++等價
  • gcc可以用來編譯c++但它不會自動調用鏈接的c++庫,需手動鏈接,
  • gcc -lstdc++ main.cpp。g++則會自動調用鏈接的c++庫。
  • g++在編譯的過程中,其實是調用gcc按照c++程序來編譯的。即編譯工作最終都是由gcc來完成的。
  • 對於c++程序,gcc不能自動和C++程序使用的庫聯接,需要自己手動鏈接c++庫,所以鏈接可以用g++或者gcc -lstdc++。也即是說c++程序,也可以用gcc來鏈接。
  • 但gcc在編譯c程序的時候,它會自動鏈接c庫的。

  • 誤區:gcc只能編譯c代碼,g++只能編譯c++代碼
  • .c的,gcc把它當作是C程序,而g++當作是c++程序
  • .cpp的,兩者都會認爲是c++程序,注意,雖然c++是c的超集,但是兩者對語法的要求是有區別的。C++的語法規則更加嚴謹一些。
  • 編譯階段,g++會調用gcc。對c++,可以用gcc或g++來編譯,二者等價的。
  • 鏈接階段,因爲gcc命令不能自動和C++程序使用的庫聯接,所以通常用g++來完成鏈接。一般爲了方便,乾脆編譯和鏈接都用g++了。這就給人一種錯覺,好像cpp程序只能用g++編譯鏈接似的。

  • 誤區:gcc不會定義__cplusplus宏,而g++會
  • 這個宏只是標誌着編譯器將會把代碼按C還是C++語法來解釋,如上所述,如果後綴爲.c,並且採用gcc編譯器,則該宏就是未定義的,否則,就是已定義。

  • 誤區:編譯只能用gcc,鏈接只能用g++
  • 應該這樣說:編譯可以用gcc/g++,而鏈接可以用g++或者gcc -lstdc++。gcc不能自動和C++程序使用的庫聯接,所以通常使用g++來完成聯接。但在編譯階段,g++會自動調用gcc,二者等價。

chao網址

  • https://blog.csdn.net/p942005405/article/details/83061693

STL

  • “Standard Template Library”
  • STL 是 C++ 標準庫的一部分,不用單獨安裝。

  • C++ 對模板(Template)支持得很好,STL 就是藉助模板把常用的數據結構及其算法都實現了一遍,做到了數據結構和算法的分離。
  • vector 的底層爲順序表(數組),
  • list 的底層爲雙向鏈表,
  • deque 的底層爲循環隊列,
  • set 的底層爲紅黑樹,
  • hash_set 的底層爲哈希表。

鏈接

  • http://c.biancheng.net/stl/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章