文章目录

  • 前言
  • 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 -ansi, -std=c90, -std=iso9899:1990 -std=gnu90
1995 ISO/IEC 9899/AMD1:1995 AMD1 C94, C95 -std=iso9899:199409 -
1999 ISO/IEC 9899:1999 C99 - -std=c99, -std=iso9899:1999 -std=gnu99
2011 ISO/IEC 9899:2011 C11 - -std=c11, -std=iso9899:2011 -std=gnu11
2018 ISO/IEC 9899:2018 C18 - -std=c18, -std=iso9899:2018 -std=gnu18

C++版本更迭

年份 C++标准 通用名 别名 标准编译选项 GNU扩展选项
1978 C with Classes - - - -
1998 ISO/IEC 14882:1998 C++98 - -std=c++98 -std=gnu++98
2003 ISO/IEC 14882:2003 C++03 - -std=c++03 -std=gnu++03
2011 ISO/IEC 14882:2011 C++11 C++0x std=c++11, std=c++0x std=gnu++11, std=gnu++0x
2014 ISO/IEC 14882:2014 C++14 C++1y std=c++14, std=c++1y std=gnu++14, std=gnu++1y
2017 ISO/IEC 14882:2017 C++17 C++1z std=c++17, std=c++1z std=gnu++17, std=gnu++1z
2020 to be determined C++20 C++2a -std=c++2a std=gnu++2a

号外号外

C/C++标准

  1. 看了C++的发展史才知道,原来从1978年Bjarne Stroustrup就开始了C++雏形的使用,直到20年后的1998年才确定了第一个C++标准
    2.C++11之前被称为C++0x,据说C++0xC++11的草案,所以有些编译器使用C++11的编译参数是:-std=c++0x,后来使用:-std=c++11,但是据说不完全相同
  2. 关于C++20,协程的加入应该是一大惊喜了,值得期待!官方还表示,C++20 应该会是一个像 C++11 那样的大版本

gcc/g++

  1. gcc发展到今天已经不单单可以编译C语言了,还可以编译C++JavaObject-C等多种其他语言
  2. 有一种说法是GCC的全名是GNU Compiler Collection(GUN 编译器集合),而gccGCC中用于编译c语言的编译器
  3. 事实上,gcc看起来并不像是一个编译器,而像一个调度器,针对于不同的文件调用不同编程语言的编译器
  4. 对于后缀为*.c的文件,gcc把它当作是C语言程序源代码,而g++当作是C++程序源代码
  5. 对于后缀为*.cpp的文件,gccg++都会当作是C++程序源代码
  6. 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL,所以再使用gcc编译C++程序是有时会报错
  7. 在用gcc编译C++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++g++等价
  8. 据说g++会调用gcc,对于C++代码,因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接
  9. 需要注意的是,虽说g++会调用gcc,对于*.c文件来说,编译出来的可执行文件也不一样,因为gcc会当成C语言程序编译,而g++调用的gcc会把它当做C++语言程序来编译,这或许就能解释为什么用g++就可以编译所有C/C++的程序,还要有gcc的存在(就我测试来看,同样的C语言代码,g++编译出来的程序体积要大一些)

C/C++版本更迭历程相关推荐

  1. 开发者社区SDK对应版本更迭信息

    开发者社区SDK对应版本更迭信息 2021年1月12日 OpenNI SDK V2.3.0.66版本更新如下: 1.安卓上支持SELinux权限,提供NIViewer的安卓源码示例: 2.修改了部分模 ...

  2. webpack版本升级的差异大版本更迭

    webpack版本升级的差异大版本更迭 webpack和gulp最大的区别在于它是一个打包工具,它串联起了整个前端工程化的每一项内容.我非常庆幸的是经历过webpack1到2的升级,也经历了2到3的升 ...

  3. React本地化解决版本更迭出现的缓存问题

    之前项目使用React写法是本地化引用.项目基本功能都已经开发完毕,处于优化运维阶段.在每次功能上线优化,版本更迭的时候都会有缓存问题出现,不进行强制清缓存刷新,页面功能样式都还是老样子. 一开始查询 ...

  4. Bitcoin ABC近半数节点已经完成了版本更迭

    距离BCH 5月15日的硬分叉升级已经不足一周,开发者们和全节点运行人员都在做着最后的准备.开发者方面,Bitcoin ABC开发组在5月6日发布了自0.19版本之后的第五个版本0.19.5,不出意外 ...

  5. svn版本更迭的原理

    如上图所示: 版本1到版本2的更迭过程中,会复制版本1的没有改的文件FileB,同时用新的FileA和FileC覆盖原来的FileA和FileB 2到3到n同理 弊端 随着文件数量的不断变大,后面的版 ...

  6. 微软学术搜索项目 10个版本的历程

    这是我在微软亚洲研究院参与的项目之一, 从 2009 年秋天开始, 我们小组把它从一个研究原型发展为涵盖全学科的学术搜索门户. 它索引了 4千万论文, 2千万作者, 6 大实体类型, 8 种数据可视化 ...

  7. 微软学术搜索项目10个版本的历程 - 分析流程

    软件系统的开发流程,传统意义上分为六个阶段:问题的定义和规划.需求分析.软件设计.编码阶段.测试阶段.和运行维护阶段. 对于微软学术搜索项目来说,采用了以8周作为一个"里程碑"的开 ...

  8. Android版本更迭(整理目录)

    Android 6.0 1,动态权限管理 2,加入指纹识别 3,App Links跳转 4,Android pay(这个没了解过) 5,电源管理(有待详细) 6,存储,之后TF卡越来越少 Androi ...

  9. git版本更迭的原理

    如上图, ①版本1到版本2中,改的文件是A和c,版本二就用a和c的快照a1和c1文件保存进来,同时B文件没有改,就吧B的指针地址也保存到版本2中, 这样git的每个版本都会有所有的文件,采用空间换取时 ...

最新文章

  1. python面试常见问题-Python面试常见的8个问题及答案总结
  2. 以太坊Oracle系列二:My Oracle
  3. python列表换行写入_如何使用Python3中的换行符将列表写入文件
  4. 暗备用的运行状态_瞧:我利用“无偏二极管”发明设计出了【宇宙“暗物质”、“暗能量”探测器】...
  5. Web设计师须知的10项SEO技巧
  6. linux 监控java内存_Linux下实用的JAVA内存泄露监控命令及工具
  7. Java集合---面试题
  8. 一份阿里员工的Java问题排查工具单
  9. 中国成为「研究生大国」,99%研究生背后的焦虑:就业更难了!
  10. Git服务器的搭建和使用
  11. 小米4C关闭html查看器,小米4C解锁教程_小米4C一键解锁Bootloader的方法
  12. iOS开发之--内购、GameCenter、iCloud、Passbook功能开发汇总
  13. 苹果系统上安装windows教程(图文详解+工具)一看就会!
  14. 前端通过【bitly】Api,将长链接转换短连接
  15. 企业级大数据项目【1】需求分析及概要设计篇
  16. Java md5加解密汉字_Java加解密_MD5
  17. SOM -- 自组织特征映射网络
  18. 一篇文章看明白 Android v1 v2 签名机制
  19. html鼠标背景特效,6种鼠标滑过按钮背景动画特效
  20. Linux系统上下载磁力链接magnet,种子文件torrent,Linux安装Aria2

热门文章

  1. 读书笔记--删除数据时的提示效果在项目中的应用
  2. 前端接收bolb格式下载文件,前端下载blob格式的文件
  3. 利用Chrome网络请求调试页面跳转问题
  4. 单音信号对载波信号进行双边带幅度调制
  5. 给定一个任意的大写字母A~Z,转换为小写字母。
  6. IDEA安装插件提示was not installed: Cannot download解决办法
  7. Agora声网-Uniapp拉流(Vue拉流)
  8. 习题3-5 三角形判断(15 分)
  9. POI生成word文档,再通过spire.doc.free 实现word转pdf
  10. 【农业科研进展】小麦白粉病与植物叶部病害监测识别