C/C++版本更迭历程

前言

使用 C/C++ 实现功能的时候经常需要上网搜索一些解决方案,但是当你把代码粘贴到自己项目中时偶尔会出现编译失败的问题,其中一个原因就是新加的代码所使用的特性在当前的编译环境中并不支持,就好像不久前我们还在使用VS2003写着C++98标准的代码(2015年),虽然对C++11的特性垂涎已久,但是无奈在项目中就是无法使用,只能是遥望着它发飞快地发展出了C++14和C++17。

涉及到C/C++版本和标准的最常见的地方就是编译选项了,比如常见的 -std=c++11 就是使用C++11的标准编译,关于 C/C++ 各个版本标准的差异我们可能无法全部记住,但是一些主要的版本更替,还是很有必要了解一下的。

C语言版本更迭

年份C标准通用名别名标准编译选项GNU扩展选项
1972Birth C----
1978K&R C----
1989-1990X3.159-1989, ISO/IEC 9899:1990C89C90, ANSI C, ISO C-ansi, -std=c90, -std=iso9899:1990-std=gnu90
1995ISO/IEC 9899/AMD1:1995AMD1C94, C95-std=iso9899:199409-
1999ISO/IEC 9899:1999C99--std=c99, -std=iso9899:1999-std=gnu99
2011ISO/IEC 9899:2011C11--std=c11, -std=iso9899:2011-std=gnu11
2018ISO/IEC 9899:2018C18--std=c18, -std=iso9899:2018-std=gnu18

C++版本更迭

年份C++标准通用名别名标准编译选项GNU扩展选项
1978C with Classes----
1998ISO/IEC 14882:1998C++98--std=c++98-std=gnu++98
2003ISO/IEC 14882:2003C++03--std=c++03-std=gnu++03
2011ISO/IEC 14882:2011C++11C++0xstd=c++11, std=c++0xstd=gnu++11, std=gnu++0x
2014ISO/IEC 14882:2014C++14C++1ystd=c++14, std=c++1ystd=gnu++14, std=gnu++1y
2017ISO/IEC 14882:2017C++17C++1zstd=c++17, std=c++1zstd=gnu++17, std=gnu++1z
2020to be determinedC++20C++2a-std=c++2astd=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++编译出来的程序体积要大一些)
  • 32
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlbertS

常来“玩”啊~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值