由于在看书的过程中,会经常提到这个特性是在CXX标准里加入的,又不清楚各个标准之间的关系,以及自己学的倒是是什么标准,学的东西到底可不可移植,为了捋清楚C语言发展的各个标准版本,根据网上的资料,整理了这篇文章。
我一直很喜欢一句话:大胆假设,小心求证。面对一件事情,在相信它之前我认为一定要去找到一些比较官方权威的资料支撑。

C语言标准

1969-1973
美国贝尔实验室的丹尼斯·里奇(Dennis Ritchie)在B语言的基础上设计出了一种新的语言,C语言。

1973年
Unix操作系统的核心正式用C语言改写,这是C语言第一次应用在操作系统的核心编写上。

1978年:K&R C
丹尼斯·里奇布莱恩·柯林汉合作出版了《The C Programming
Language》的第一版。书中介绍的C语言标准也被C语言程序员称作”K&R C”。

1989年:C89/ANSI C
1989年,C语言被美国国家标准协会(ANSI)标准化,编号为ANSI X3.159-1989。这个版本称为C89或ANSI C。标准化的一个目的是扩展K&R C,增加了一些新特性。

1990年: ISO C90
官网: ISO/IEC JTC1/SC22/WG14 - C (open-std.org)
1990年,国际标准化组织(ISO)成立 ISO/IEC JTC1/SC22/WG14 工作组,来规定国际标准的C语言,通过对ANSI标准的少量修改,最终制定了 ISO 9899:1990,又称为C90。随后,ANSI亦接受国际标准C,并不再发展新的C标准。C90与C89基本相同。

1999年:C99
http://open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C++在自己的标准化创建过程中继续发展壮大。《标准修正案一》在1994年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。

2011年:C11
http://open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf
2011年12月8日,ISO正式发布了新的C语言的新标准C11(之前被称为C1X),官方名称为ISO/IEC 9899:2011。新的标准提高了对C++的兼容性,并增加了一些新的特性。这些新特性包括泛型、多线程、带边界检查的函数、匿名结构等。

2017年发布C17
2023年发布C23

寻找标准

C语言的标准制定大致分为3个阶段:
作者制定发布
1989年前,通过《The C Programming Language》这本书中讲述的就是C语言最权威的标准。

ANSI
1989年ANSI发布C89(ANSI C)标准后,ANSI C就是当时最权威的标准。此时这个标准只是美国制定的。

ISO
在1990年ISO认可ANSI的标准,并进行一点点小的修改后,发布了C90,此后,ISO称为了C标准的最权威的机构。ANSI的参与确保了C语言标准的国际化和标准化,使得C语言的发展符合国际标准化组织的要求,并且促进了各国之间在C语言标准化方面的合作与交流。

问题来了,如果我想学标准的C89,是不是应该看看C89的官方文档?你可能下意识的就想去网上查找C89的官方文档,可是事情似乎不太妙,因为你会发现C89的官方文档是要收费的,还不便宜。你只能看到标准的草案。草案毕竟是草案,跟标准的不太一样。

那问题又来了,我们看到的C语言学习资料究竟有多少真的参考了ISO/ANSI的官方标准?如果没有参考,那么他们是从什么地方学习到的?
对于参考官方标准,我还真不知道,但对于CSDN等灌水网站上发布的教程博客,我个人认为大多数都是没看过的。对于中文的C语言教材,我觉得也不太乐观,就例如我在查C83标准的时候看到的帖子ANSI C (83)和87 ANSI C 这两个标准存在么? - 知乎 (zhihu.com)

至于他们从哪里学到的
他们应该也是从网上/书籍学到的,至于他们选择的资料有没有参考,似乎又回到了第一个问题上。

想到这里,我后背一阵发凉,如果某个写书/博客的人,在讲某个知识点的时候,理解出现了偏差,但他恰好又能自圆其说,那将会是一件很可怕的事情,甚至会出现盗版标准这样的搞笑事件。(C83标准不就是,中文能搜到一大堆,但英文就搜不到。国内有多少学生用过谭浩强书籍啊)

最后

大胆假设,小心求证,学习新知识还是建议使用官方或者权威的教程,尽管我之前在学习的时候也没怎么看过官方教程。但通过这次的找标准,结结实实的给我上了一课。也告诉了我以后在发表技术类文章的时候一定要求证,一定要验证。