文章目錄
- 前言
- C語言版本更疊
- C++版本更疊
- 号外号外
-
- C/C++标準
- gcc/g++
前言
使用
C/C++
實作功能的時候經常需要上網搜尋一些解決方案,但是當你把代碼粘貼到自己項目中時偶爾會出現編譯失敗的問題,其中一個原因就是新加的代碼所使用的特性在目前的編譯環境中并不支援,就好像不久前我們還在使用VS2003寫着C++98标準的代碼(2015年),雖然對C++11的特性垂涎已久,但是無奈在項目中就是無法使用,隻能是遙望着它發飛快地發展出了C++14和C++17。
涉及到C/C++版本和标準的最常見的地方就是編譯選項了,比如常見的
-std=c++11
就是使用C++11的标準編譯,關于
C/C++
各個版本标準的差異我們可能無法全部記住,但是一些主要的版本更替,還是很有必要了解一下的。
C語言版本更疊
年份 | C标準 | 通用名 | 别名 | 标準編譯選項 | GNU擴充選項 |
---|---|---|---|---|---|
1972 | Birth C | - | - | - | - |
1978 | K&R C | - | - | - | - |
1989-1990 | X3.159-1989, ISO/IEC 9899:1990 | C89 | C90, ANSI C, ISO C | , , | |
1995 | ISO/IEC 9899/AMD1:1995 | AMD1 | C94, C95 | | - |
1999 | ISO/IEC 9899:1999 | C99 | - | , | |
2011 | ISO/IEC 9899:2011 | C11 | - | , | |
2018 | ISO/IEC 9899:2018 | C18 | - | , | |
C++版本更疊
年份 | C++标準 | 通用名 | 别名 | 标準編譯選項 | GNU擴充選項 |
---|---|---|---|---|---|
1978 | C with Classes | - | - | - | - |
1998 | ISO/IEC 14882:1998 | C++98 | - | | |
2003 | ISO/IEC 14882:2003 | C++03 | - | | |
2011 | ISO/IEC 14882:2011 | C++11 | C++0x | , | , |
2014 | ISO/IEC 14882:2014 | C++14 | C++1y | , | , |
2017 | ISO/IEC 14882:2017 | C++17 | C++1z | , | , |
2020 | to be determined | C++20 | C++2a | | |
号外号外
C/C++标準
- 看了
的發展史才知道,原來從1978年Bjarne Stroustrup就開始了C++
雛形的使用,直到20年後的1998年才确定了第一個C++
C++
标準
2.
之前被稱為C++11
,據說C++0x
是C++0x
的草案,是以有些編譯器使用C++11
的編譯參數是:C++11
,後來使用:-std=c++0x
,但是據說不完全相同-std=c++11
- 關于
,協程的加入應該是一大驚喜了,值得期待!官方還表示,C++20
應該會是一個像C++20
那樣的大版本C++11
gcc/g++
-
發展到今天已經不單單可以編譯gcc
語言了,還可以編譯C
、C++
、Java
等多種其他語言Object-C
- 有一種說法是
的全名是GNU Compiler Collection(GUN 編譯器集合),而GCC
是gcc
中用于編譯c語言的編譯器GCC
- 事實上,
看起來并不像是一個編譯器,而像一個排程器,針對于不同的檔案調用不同程式設計語言的編譯器gcc
- 對于字尾為
的檔案,*.c
把它當作是gcc
語言程式源代碼,而g++當作是C++程式源代碼C
- 對于字尾為
的檔案,*.cpp
和gcc
都會當作是C++程式源代碼g++
- 使用
編譯檔案時,g++會自動連結标準庫g++
,而STL
不會自動連結gcc
,是以再使用STL
編譯gcc
程式是有時會報錯C++
- 在用
編譯gcc
檔案時,為了能夠使用C++
,需要加參數STL
,但這并不代表–lstdc++
和gcc –lstdc++
等價g++
- 據說
會調用g++
,對于gcc
代碼,因為C++
指令不能自動和gcc
程式使用的庫聯接,是以通常用C++
來完成連結g++
- 需要注意的是,雖說
會調用g++
,對于gcc
檔案來說,編譯出來的可執行檔案也不一樣,因為*.c
會當成gcc
語言程式編譯,而C
調用的g++
會把它當做gcc
語言程式來編譯,這或許就能解釋為什麼用C++
就可以編譯所有g++
的程式,還要有C/C++
的存在(就我測試來看,同樣的gcc
語言代碼,C
編譯出來的程式體積要大一些)g++