C标准: ISO/IEC 9899
WG14是C国际化标准化工作组 ISO/IEC JTC1/SC22/WG14 - C
K&R C
起初,C语言没有官方标准。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。布莱恩·柯林汉(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本书,名叫《The C Programming Language》。这本书被C语言开发者们称为K&R,很多年来被当作C语言的非正式的标准说明。人们称这个版本的C语言为K&R C。
C89/ANSI C
1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。
1983年,美国国家标准协会(ANSI)成立了一个委员会X3J11,来制定 C语言标准。
1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSI X3.159-1989 "Programming Language C"。因为这个标准是1989年通过的,所以一般简称C89标准。有些人也简称ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。
1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC 9899:1990 - Programming languages -- C。因为此标准是在1990年发布的,所以有些人把简称作C90标准。不过大多数人依然称之为C89标准,因为此标准与ANSI C89标准完全等同。
修订版本:
ISO/IEC 9899:1990/Cor 1:1994
ISO/IEC 9899:1990/Amd 1:1995
ISO/IEC 9899:1990/Cor 2:1996
C99
1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC 9899:1999 - Programming languages -- C,简称C99标准。这是C语言的第二个官方标准。
修订版本:
ISO/IEC 9899:1999/Cor 1:2001
ISO/IEC 9899:1999/Cor 2:2004
ISO/IEC 9899:1999/Cor 3:2007
C11
2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C语言的新标准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C ,简称C11标准,原名C1X。这是C语言的第三个官方标准。
修订版本:
ISO/IEC 9899:2011/Cor 1:2012
2022-02-26:Linus宣布将在内核版本v5.18 中尝试使用C11标准。
C17
ISO/IEC 9899:2018。没有引入新的语言特性,只对 C11 进行了补充和修正。
C++标准: ISO/IEC 14882
WG21是C++标准委员会 ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee - ISOCPP
C++ 98
C++标准第一版,1998年发布。正式名称为ISO/IEC 14882:1998。
绝大多数编译器都支持C++98标准。不过当时错误地引入了export关键字。由于技术上的实现难度,除了Comeau C++编译器export关键字以外,没有任何编译器支持export关键字。并且这个标准对现代的一些编译理念有相当的差距,有很多在高级语言都应当有的功能,它都没有。这也正是后来需要制定C++11标准的原因所在。
C++ 03
C++标准第二版,2003年发布。正式名称为ISO/IEC 14882:2003。这个标准仅仅是C++98修订版,与C++98几乎一样,没做什么修改。仅仅是对C++98做了一些“勘误”,就连主流编译器(受C99标准影响)都已支持的long long都没有被加入C++03标准。
C++ 11
C++标准第三版,2011年8月12日发布。正式名称为ISO/IEC 14882:2011。
由C++标准委员会于2011年8月12日公布,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于现行标准的草案(编辑上的修正)。C++11包含了核心语言的新机能,并且拓展C++标准程序库,并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)。此次标准为C++98发布后13年来第一次重大修正。
C++ 14
C++标准第四版,2014年8月18日发布。正式名称为ISO/IEC 14882:2014。
2014年8月18日,ISO组织在其网站上发布文章称:
C++ 作者 Bjarne Stroustrup 称,主要的编译器开发商已经实现了 C++ 14 规格。
C++ 14 是 C++ 11 的增量更新,主要是支持普通函数的返回类型推演,泛型 lambda,扩展的 lambda 捕获,对 constexpr 函数限制的修订,constexpr变量模板化等。
C++ 17
2017年12月5日发布,正式名称为 ISO/IEC 14882:2017。
C++ 20
2020年12月18日发布,正式名称为 ISO/IEC 14882:2020。
C++20新特性:
模块 (Modules)
协程 (Coroutines)
范围 (Ranges)
概念与约束 (Constraints and concepts)
指定初始化 (designated initializers)
操作符 <=> != ==
constexpr支持:new/ delete、dynamic_cast、try/ catch、虚拟
constexpr 向量和字符串
计时:日历、时区支持
std::format
std::span
std::jthread