而知,低版本的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.参考:

C11Status

得知:

-std=c1xGCC 4.6

-std=c11GCC 4.7

uchar.hLibrary 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 plaincopy
  1. sudo add-apt-repository ppa:ubuntu-toolchain-r/test
  2. sudo apt-get update
  3. sudo apt-get install gcc-4.8
  4. sudo apt-get install g++-4.8

等GCC/G++下载并安装完以后,测试是否安装成功:

[c++] view plaincopy
  1. gcc-4.8 -v
  2. 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的软链接:

[c++] view plaincopy
  1. sudo rm /usr/bin/gcc
  2. sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
  3. sudo rm /usr/bin/g++
  4. 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)语句,用来遍历给定序列中的每个元素:

[cpp] view plaincopy
  1. /*************************************************************************
  2. > File Name: test.cpp
  3. > Author: SongLee
  4. > E-mail: lisong.shine@qq.com
  5. > Created Time: 2014年03月23日 星期日 22时29分19秒
  6. > Personal Blog: http://songlee24.github.io/
  7. ************************************************************************/
  8. #include<iostream>
  9. #include<cstring>
  10. #include<cctype>
  11. using namespace std;
  12. int main()
  13. {
  14. string str("some string");
  15. // range for 语句
  16. for(auto &c : str)
  17. {
  18. c = toupper(c);
  19. }
  20. cout << str << endl;
  21. return 0;
  22. }

上面的程序使用Range for语句遍历一个字符串,并将所有字符全部变为大写,然后输出。其中auto类型也是C++11新标准中的,用来自动获取变量的类型。

好了,接下来进行编译运行:

[cpp] view plaincopy
  1. g++ -o test test.cpp

提示错误:‘c’变量没有类型,范围for循环不允许在C++98标准中使用

这是因为GCC/G++默认的-std(即C++语言标准)不是C++11,在这里默认的是C++98,所以需要显式地开启,即添加-std=c++11选项:

[cpp] view plaincopy
  1. g++ -std=c++11 -o test test.cpp

编译成功!!!运行以后输出some string的大写形式!

哪个版本的gcc才支持c11相关推荐

  1. 如何确定gcc是否支持c11,c14,c17

    实际工作中,可能会遇到c++的一些高级特性,例如std::invoke,此函数是c++17才引入的,如何判断当前的gcc是否支持c++17呢,这里提供两种办法. 1.根据gcc的版本号来推断 gcc ...

  2. gcc/g++ 如何支持c11 / c++11标准编译

    gcc/g++ 如何支持c11 / c++11标准编译 linux中的编译环境默认可能不支持C++11语法,如R"(abc)"原始字符串. 那么如果一定要编译呢? 通过命令man ...

  3. databinding在android studio2.3版本后不再默认支持使用

    databinding在android studio2.3版本后不再默认支持使用,需要在项目的app-build-gradle的 dependencies 里面添加 apt 'com.android. ...

  4. linux中不同版本的gcc切换,Ubuntu 14.04中升级gcc到版本4.9.2并切换使用它们

    昨天刚全新在虚拟机上安装了Ubuntu 14.04,在其中安装的gcc版本是4.8.4.而我需要编译C++程序,在安装之后,我立刻就通过命令: sudo apt-get install build-e ...

  5. ubuntu安装使用不同版本的gcc

    ubuntu 使用不同版本的gcc ubuntu 系统不同的版本具有不同的gcc,比如ubuntu 10.04默认gcc版本为gcc-4.4.1,ubuntu 10.10gcc默认版本为gcc-4.4 ...

  6. 低版本IE浏览器不支持前端代码修改属性remove()的解决办法

    今天在工作中碰到了低版本IE浏览器不支持对象属性移除(remove)和添加(add)的方法,请教了同事结合在网上找到的资源最后写了这一段代码,完美的解决了一个前端基础问题,在此记录一下,希望可以帮助到 ...

  7. Rest风格的URL地址约束||高版本Tomcat;Rest支持有点问题

    Rest:系统希望以非常简洁的URL地址来发请求: 怎样表示对一个资源的增删改查用请求方式来区分 /getBook?id=1   :查询图书 /deleteBook?id=1:删除1号图书 /upda ...

  8. 虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本。 模块“Upgrade”启动失败。 未能启动虚拟机(修改.vmx文件virtualHW.version = “xx“字段)

    1.找到并通过记事本程序打开虚拟机的.vmx文件: 2.找到文件中的virtualHW.version = "19"字段,修改该字段为virtualHW.version = &qu ...

  9. linux中可以安装不同版本的gcc么,在linux下安装多个版本的GCC

    文章链接:http://blog.csdn.net/chid/article/details/6251781 很是有用,转载学习 1.查看当前linux版本 内核版本:cat /proc/versio ...

  10. linux安装ld编译器,科学网—手动安装特定版本的gcc编译器 - 亓欣波的博文

    Linux发行版中一般预装了gcc编译器,版本随系统不同而不同,有时候不想用(或者是不能用)系统默认的gcc编译器,就需要自己编译特定版本的gcc编译器. 这里以在Ubuntu14.04环境(默认gc ...

最新文章

  1. axure中怎么把图片变圆_orcad中怎么创建带图片的Title Block?
  2. window python输入路径问题--转义字符
  3. Bloom Filter算法
  4. Django视图(python函数)
  5. Python练习:用户登录(三次机会)
  6. oracle用中文linux,linux+oracle中文乱码
  7. 【前端 · 面试 】HTTP 总结(二)—— HTTP 消息
  8. SharePoint 2010新特性文档集
  9. 一步一步使用标c编写跨平台图像处理库_让一个图像变成反向图像
  10. c语言getchar的作用,c=getchar()!='\n'到底什么用呢
  11. VB编程语言基础知识点总结(转)
  12. 微信爬虫服务器,为什么现在那么多爬虫,却没有爬取微信公众号文章的案例?...
  13. Java集合,泛型,枚举详解
  14. Unity内存/GC优化方法
  15. 单位公司年会团拜会抽奖软件程序
  16. vue+Element-ui table按照字母排序
  17. Hi3516DV300开发板——2.uboot、kernel、fs文件系统烧写
  18. 公司口碑及待遇评价的网站
  19. 微信小程序代码保存后,自动格式化代码
  20. Spark Core:Scala单词计数

热门文章

  1. 磁卡、条码卡、IC卡、ID卡基本知识
  2. 【知识兔】自学Excel之11:模板使用和打印设置
  3. 深圳市坪山区制造业高质量发展资金申报条件及时间,补贴高达1亿
  4. 2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!(转载)
  5. 同时安装Office2016和Visio2016
  6. CodeForces 499C、Crazy Town
  7. 《勒索软件防护体系建设指南》发布|美创深度参编,入选代表性厂商
  8. python语言月份缩写_[宜配屋]听图阁
  9. html5橡皮擦,用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
  10. DELL笔记本UEFI+GPT安装window10与Ubuntu双系统