[转载]哪个版本的gcc才支持c11
转自:https://blog.csdn.net/haluoluo211/article/details/71141093
哪个版本的gcc才支持c11
而知,低版本的gcc不支持c11。
(而我此处的eglibc 2.17,和那人的glibc-2.16.0,都是需要支持c11的gcc的)
所以此处想要去搞清楚,什么版本的,哪个版本的,gcc,才支持c11。
【解决过程】
1.google搜:
gcc c11
就可以看到:
2 Language Standards Supported by GCC
而明白:
- C89=C90:gcc选项是:-ansi, -std=c90 or -std=iso9899:1990;
- 带了GNU扩展的:-std=gnu90
- C94=C95:gcc选项:-std=iso9899:199409
- C99:gcc选项:-std=c99 or -std=iso9899:1999
- 未完成C99标准之前,叫做C9X
- 带了GNU扩展的:-std=gnu99
- C11:gcc选项是-std=c11 or -std=iso9899:2011
- 未完成C11标准之前,叫做C1X
- 带了GNU扩展的:-std=gnu11
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新标准带来的东西吧!
首先非源码编译式安装:
- sudo add-apt-repository ppa:ubuntu-toolchain-r/test
- sudo apt-get update
- sudo apt-get install gcc-4.8
- sudo apt-get install g++-4.8
等GCC/G++下载并安装完以后,测试是否安装成功:
- gcc-4.8 -v
- g++-4.8 -v
如果显示版本号表示安装成功:

安装成功后我们如果要使用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的软链接:
- sudo rm /usr/bin/gcc
- sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
- sudo rm /usr/bin/g++
- sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++
现在我们用gcc -v来测试就能发现变为了4.8了!
既然GCC-4.8使用了最新的C++11标准,但是我们为什么还是提示错误呢?解决方法如下:
在编译的时候添加-std=c++11选项即可正常编译C++11标准的代码!
我们可以写一个简单的例子来测试,这里用的是C++11新标准的范围for(Range for)语句,用来遍历给定序列中的每个元素:
- /*************************************************************************
- > File Name: test.cpp
- > Author: SongLee
- > E-mail: lisong.shine@qq.com
- > Created Time: 2014年03月23日 星期日 22时29分19秒
- > Personal Blog: http://songlee24.github.io/
- ************************************************************************/
- #include<iostream>
- #include<cstring>
- #include<cctype>
- using namespace std;
- int main()
- {
- string str("some string");
- // range for 语句
- for(auto &c : str)
- {
- c = toupper(c);
- }
- cout << str << endl;
- return 0;
- }
上面的程序使用Range for语句遍历一个字符串,并将所有字符全部变为大写,然后输出。其中auto类型也是C++11新标准中的,用来自动获取变量的类型。
好了,接下来进行编译运行:
- g++ -o test test.cpp
提示错误:‘c’变量没有类型,范围for循环不允许在C++98标准中使用
这是因为GCC/G++默认的-std(即C++语言标准)不是C++11,在这里默认的是C++98,所以需要显式地开启,即添加-std=c++11选项:
- g++ -std=c++11 -o test test.cpp

编译成功!!!运行以后输出some string的大写形式!
[转载]哪个版本的gcc才支持c11的更多相关文章
- 哪个版本的gcc才支持c11
而知,低版本的gcc不支持c11. (而我此处的eglibc 2.17,和那人的glibc-2.16.0,都是需要支持c11的gcc的) 所以此处想要去搞清楚,什么版本的,哪个版本的,gcc,才支持c ...
- gcc/g++ 如何支持c11 / c++11标准编译
如果用命令 g++ -g -Wall main.cpp 编译以下代码 : /* file : main.cpp */ #include <stdio.h> int main() { in ...
- 【转】gcc/g++ 如何支持c11 / c++11标准编译
如果用命令 g++ -g -Wall main.cpp 编译以下代码 : 1 2 3 4 5 6 7 8 9 10 11 12 /* file : main.cpp */ #include ...
- 转载:Centos升级gcc
一.检查centos 里面是否安装了gcc g++ 输入命令:rpm -qa|grep gcc*有看到就出来gcc的东西就是装了没有的话就yum install gcc* -y 二.升级gcc 对于C ...
- Cocos2d-x V2.x版本对64bit的支持
2015年2月1日后新提交的应用必须要支持64位架构. 我所使用的是cocos2d-x V2.0版本,而且源码有部分代码是修改过的.好在cocos2d-x官方已经放出了一个支持64位的2.2.6版本, ...
- 让旧版本的 Flash IDE 支持更新的 Flash Player/AIR 功能
转载:https://blog.zengrong.net/post/1568.html 让旧版本的 Flash IDE 支持更新的 Flash Player/AIR 功能 今天在论坛上看到一篇文章:H ...
- IOS中多版本,多设备类型支持注意事项
IOS系统从07年出来,到现在也有6年了,每年发布一次到两次新的设备,从iPhone1,iPhone2 ... iPhone4s再到最新的iPhone5.硬件在升级的过程中CPU的架构也可能发生变化, ...
- 美版nexus 5 LG D820才支持CDMA,国际版LG D821不支持
我们都知道nexus 5其实是有两个不同的版本的,分别是LG D820和LG D821,它们在几乎所有的配置和外观上都没有任何的区别,主要区别在通讯模块上,一个支持GSM/CDMA/WCDMA/LTE ...
- 升级GCC以支持C++11
本文主要介绍在Linux系统下,如何升级GCC以支持C++11.目前来看GCC是对C++11支持程度最高最多的编译器,但需要GCC4.8及以上版本. 本文使用操作系统:Centos 6.4 Desk ...
随机推荐
- 新浪微博 [异常问题] 414 Request-URL Too Large
新浪微博 [异常问题] 414 Request-URL Too Large 浏览器上打开新浪微博,或则日志是返回结果提示:414 Request-URL Too Large原因:因同IP访问微博页面过 ...
- AWS免费云服务套餐申请步骤及常见问题
AWS免费云服务套餐申请步骤及常见问题 AWS免费使用套餐常见问题_AWS免费云服务套餐_-AWS云服务https://amazonaws-china.com/cn/free/faqs/ 什么是 AW ...
- 利用PHP将图片转换成base64编码的实现方法
先来说一下为什么我们要对图片base64编码 base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一.base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于网络传输. ...
- Oracle 数据库实现数据合并:merge
1.使用update进行数据更新 1)最简单的更新 update tablea a set a.price=1.00 2)带条件的数据更新 update tablea a set a.price = ...
- JS3D效果
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...
- 使用Wisdom RESTClient进行自动化测试,如何取消对返回的body内容的校验?对排除的JSON属性字段不做校验?
使用 Wisdom RESTClient 进行自动化测试 REST API,默认是对返回HTTP状态码和body内容都进行严格匹配和校验. (1). 如果每次触发API返回的body内容是动态变化的, ...
- bzoj 3083
bzoj 3083 树链剖分,换根 对于一颗树有以下操作 1.确定x为根,2.将u到v的简单路径上的数全改成c,3.询问当前以x为根的子树中的节点最小权值. 如果没有操作1:树链剖分很明显. 于是考虑 ...
- php中session同ip不同端口的多个网站session冲突的解决办法
在局域网内使用IP加端口的访问方式搭了两个相同程序的站,结果发现用户在一个站下登录后,在另一个站也同时登录了,在一个退出后,另一个站也同时退出了.看了下程序发现两个站都是使用纯session方式记录登 ...
- python类的组合
类的组合,即在类实例化时,将另一个类的实例作为参数传入,这样可以将两个实例关联起来. 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好. 例如,描述一个机器人类,这个大类是由很多 ...
- P3243 [HNOI2015]菜肴制作(拓扑排序)
P3243 [HNOI2015]菜肴制作 题目误导你正着做拓扑排序,然鹅你可以手造数据推翻它.于是就只能倒着做 我们开个优先队列,每次把可填的最大的编号取出来搞,最后倒着输出拓扑序就好辣 #inclu ...