C/C++版本更迭历程
文章目录
- 前言
- 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++标准
- 看了
C++
的发展史才知道,原来从1978年Bjarne Stroustrup就开始了C++
雏形的使用,直到20年后的1998年才确定了第一个C++
标准
2.C++11
之前被称为C++0x
,据说C++0x
是C++11
的草案,所以有些编译器使用C++11
的编译参数是:-std=c++0x
,后来使用:-std=c++11
,但是据说不完全相同 - 关于
C++20
,协程的加入应该是一大惊喜了,值得期待!官方还表示,C++20
应该会是一个像C++11
那样的大版本
gcc/g++
gcc
发展到今天已经不单单可以编译C
语言了,还可以编译C++
、Java
、Object-C
等多种其他语言- 有一种说法是
GCC
的全名是GNU Compiler Collection(GUN 编译器集合),而gcc
是GCC
中用于编译c语言的编译器 - 事实上,
gcc
看起来并不像是一个编译器,而像一个调度器,针对于不同的文件调用不同编程语言的编译器 - 对于后缀为
*.c
的文件,gcc
把它当作是C
语言程序源代码,而g++当作是C++程序源代码 - 对于后缀为
*.cpp
的文件,gcc
和g++
都会当作是C++程序源代码 - 使用
g++
编译文件时,g++会自动链接标准库STL
,而gcc
不会自动链接STL
,所以再使用gcc
编译C++
程序是有时会报错 - 在用
gcc
编译C++
文件时,为了能够使用STL
,需要加参数–lstdc++
,但这并不代表gcc –lstdc++
和g++
等价 - 据说
g++
会调用gcc
,对于C++
代码,因为gcc
命令不能自动和C++
程序使用的库联接,所以通常用g++
来完成链接 - 需要注意的是,虽说
g++
会调用gcc
,对于*.c
文件来说,编译出来的可执行文件也不一样,因为gcc
会当成C
语言程序编译,而g++
调用的gcc
会把它当做C++
语言程序来编译,这或许就能解释为什么用g++
就可以编译所有C/C++
的程序,还要有gcc
的存在(就我测试来看,同样的C
语言代码,g++
编译出来的程序体积要大一些)
C/C++版本更迭历程相关推荐
- 开发者社区SDK对应版本更迭信息
开发者社区SDK对应版本更迭信息 2021年1月12日 OpenNI SDK V2.3.0.66版本更新如下: 1.安卓上支持SELinux权限,提供NIViewer的安卓源码示例: 2.修改了部分模 ...
- webpack版本升级的差异大版本更迭
webpack版本升级的差异大版本更迭 webpack和gulp最大的区别在于它是一个打包工具,它串联起了整个前端工程化的每一项内容.我非常庆幸的是经历过webpack1到2的升级,也经历了2到3的升 ...
- React本地化解决版本更迭出现的缓存问题
之前项目使用React写法是本地化引用.项目基本功能都已经开发完毕,处于优化运维阶段.在每次功能上线优化,版本更迭的时候都会有缓存问题出现,不进行强制清缓存刷新,页面功能样式都还是老样子. 一开始查询 ...
- Bitcoin ABC近半数节点已经完成了版本更迭
距离BCH 5月15日的硬分叉升级已经不足一周,开发者们和全节点运行人员都在做着最后的准备.开发者方面,Bitcoin ABC开发组在5月6日发布了自0.19版本之后的第五个版本0.19.5,不出意外 ...
- svn版本更迭的原理
如上图所示: 版本1到版本2的更迭过程中,会复制版本1的没有改的文件FileB,同时用新的FileA和FileC覆盖原来的FileA和FileB 2到3到n同理 弊端 随着文件数量的不断变大,后面的版 ...
- 微软学术搜索项目 10个版本的历程
这是我在微软亚洲研究院参与的项目之一, 从 2009 年秋天开始, 我们小组把它从一个研究原型发展为涵盖全学科的学术搜索门户. 它索引了 4千万论文, 2千万作者, 6 大实体类型, 8 种数据可视化 ...
- 微软学术搜索项目10个版本的历程 - 分析流程
软件系统的开发流程,传统意义上分为六个阶段:问题的定义和规划.需求分析.软件设计.编码阶段.测试阶段.和运行维护阶段. 对于微软学术搜索项目来说,采用了以8周作为一个"里程碑"的开 ...
- Android版本更迭(整理目录)
Android 6.0 1,动态权限管理 2,加入指纹识别 3,App Links跳转 4,Android pay(这个没了解过) 5,电源管理(有待详细) 6,存储,之后TF卡越来越少 Androi ...
- git版本更迭的原理
如上图, ①版本1到版本2中,改的文件是A和c,版本二就用a和c的快照a1和c1文件保存进来,同时B文件没有改,就吧B的指针地址也保存到版本2中, 这样git的每个版本都会有所有的文件,采用空间换取时 ...
最新文章
- python面试常见问题-Python面试常见的8个问题及答案总结
- 以太坊Oracle系列二:My Oracle
- python列表换行写入_如何使用Python3中的换行符将列表写入文件
- 暗备用的运行状态_瞧:我利用“无偏二极管”发明设计出了【宇宙“暗物质”、“暗能量”探测器】...
- Web设计师须知的10项SEO技巧
- linux 监控java内存_Linux下实用的JAVA内存泄露监控命令及工具
- Java集合---面试题
- 一份阿里员工的Java问题排查工具单
- 中国成为「研究生大国」,99%研究生背后的焦虑:就业更难了!
- Git服务器的搭建和使用
- 小米4C关闭html查看器,小米4C解锁教程_小米4C一键解锁Bootloader的方法
- iOS开发之--内购、GameCenter、iCloud、Passbook功能开发汇总
- 苹果系统上安装windows教程(图文详解+工具)一看就会!
- 前端通过【bitly】Api,将长链接转换短连接
- 企业级大数据项目【1】需求分析及概要设计篇
- Java md5加解密汉字_Java加解密_MD5
- SOM -- 自组织特征映射网络
- 一篇文章看明白 Android v1 v2 签名机制
- html鼠标背景特效,6种鼠标滑过按钮背景动画特效
- Linux系统上下载磁力链接magnet,种子文件torrent,Linux安装Aria2