而知,低版本的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的大写形式!