文章目录
- 前言
- 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 | , , | |
1995 | ISO/IEC 9899/AMD1:1995 | AMD1 | C94, C95 | | - |
1999 | ISO/IEC 9899:1999 | C99 | - | , | |
2011 | ISO/IEC 9899:2011 | C11 | - | , | |
2018 | ISO/IEC 9899:2018 | C18 | - | , | |
C++版本更迭
年份 | C++标准 | 通用名 | 别名 | 标准编译选项 | GNU扩展选项 |
---|---|---|---|---|---|
1978 | C with Classes | - | - | - | - |
1998 | ISO/IEC 14882:1998 | C++98 | - | | |
2003 | ISO/IEC 14882:2003 | C++03 | - | | |
2011 | ISO/IEC 14882:2011 | C++11 | C++0x | , | , |
2014 | ISO/IEC 14882:2014 | C++14 | C++1y | , | , |
2017 | ISO/IEC 14882:2017 | C++17 | C++1z | , | , |
2020 | to be determined | C++20 | C++2a | | |
号外号外
C/C++标准
- 看了
的发展史才知道,原来从1978年Bjarne Stroustrup就开始了C++
雏形的使用,直到20年后的1998年才确定了第一个C++
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
- 有一种说法是
的全名是GNU Compiler Collection(GUN 编译器集合),而GCC
是gcc
中用于编译c语言的编译器GCC
- 事实上,
看起来并不像是一个编译器,而像一个调度器,针对于不同的文件调用不同编程语言的编译器gcc
- 对于后缀为
的文件,*.c
把它当作是gcc
语言程序源代码,而g++当作是C++程序源代码C
- 对于后缀为
的文件,*.cpp
和gcc
都会当作是C++程序源代码g++
- 使用
编译文件时,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++