而知,低版本的gcc不支持c11。html
(而我此處的eglibc 2.17,和那人的glibc-2.16.0,都是須要支持c11的gcc的)ios
因此此處想要去搞清楚,什麼版本的,哪一個版本的,gcc,才支持c11。c++
【解決過程】git
1.google搜:github
gcc c11編程
就能夠看到:ubuntu
2 Language Standards Supported by GCCapp
而明白:編程語言
2.後來找到:學習
How to enable c11 on later versions of gcc?
可知:
gcc 4.7
以後,才支持c11.
3.參考:
得知:
-std=c1x GCC 4.6 -std=c11 GCC 4.7 uchar.h Library issue (glibc 2.16) |
【總結】
gcc是到了4.7,才真正支持c11的。
C++11,(即ISO/IEC 14882:2011),是目前的C++編程語言的最新正式標準。它取代了第二版標準(初版公開於1998年,第二版於2003年更新,分別通稱C++98以及C++03,二者差別很小)。新的標準包含核心語言的新機能,並且擴展C++標準程序庫。C++11新標準由C++標準委員會於2011年8月12日公佈,並於2011年9月出版。這次標準爲C++98發佈後13年來第一次重大修正。
像C++這樣的編程語言,經過一種演化的的過程來發展其定義。這個過程不可避免地將引起與現有代碼的兼容問題,在C++的發展過程當中偶爾會發生。不過根據Bjarne Stroustrup(C++的創始人而且是委員會的一員)表示,新的標準將幾乎100%兼容於現有標準。關於C++11的新特性和一些版本變動請看:C++11-維基百科
目前最新版本的GCC/G++是4.8,新版本的GCC支持最新的C++11標準,十分值得去使用&學習。 下面讓咱們在Ubuntu12.04 LTS用上GCC最新版本,去體驗C++11新標準帶來的東西吧!
首先非源碼編譯式安裝:
[c++] view plain copy
等GCC/G++下載並安裝完之後,測試是否安裝成功:
[c++] view plain copy
若是顯示版本號表示安裝成功:
安裝成功後咱們若是要使用gcc-4.8和g++-4.8來編譯的話,咱們就得把gcc改成gcc-4.8,g++同理,改成g++-4.8來進行編譯。
此時使用gcc -v查看默認版本,爲4.6版本:
若是你想直接使用gcc-4.8而不改變編譯時gcc改成gcc-4.8的話,咱們就能夠更改一下gcc的軟連接:
[c++] view plain copy
如今咱們用gcc -v來測試就能發現變爲了4.8了!
既然GCC-4.8使用了最新的C++11標準,可是咱們爲何仍是提示錯誤呢?解決方法以下:
在編譯的時候添加-std=c++11選項便可正常編譯C++11標準的代碼!
咱們能夠寫一個簡單的例子來測試,這裏用的是C++11新標準的範圍for(Range for)語句,用來遍歷給定序列中的每一個元素:
[cpp] view plain copy
上面的程序使用Range for語句遍歷一個字符串,並將全部字符所有變爲大寫,而後輸出。其中auto類型也是C++11新標準中的,用來自動獲取變量的類型。
好了,接下來進行編譯運行:
[cpp] view plain copy
提示錯誤:‘c’變量沒有類型,範圍for循環不容許在C++98標準中使用
這是由於GCC/G++默認的-std(即C++語言標準)不是C++11,在這裏默認的是C++98,因此須要顯式地開啓,即添加-std=c++11選項:
[cpp] view plain copy
編譯成功!!!運行之後輸出some string的大寫形式!