C语言标准——C89、C99、C11、C17、C2x ...

在这里插入图片描述

C的标准化过程

C语言自诞生到现在,期间经历了多次标准化过程,主要分成以下几个阶段:

Traditional C

此时的 C 语言还没有标准化,来自“C Programming Language, First Edition, by Brian W. Kernighan, Dennis M. Ritchie. Prentice Hall PTR 1978”的 C 描述可算作“正式”的标准,所以此时的 C 也称为“K&R” C。

期间 C 语言一直不断的发生细微的变化,各编译器厂商也有自己的扩展,这个过程一直持续到20世纪80年代末。

C89

考虑到标准化的重要,ANSI(American National Standards Institute)制定了第一个 C 标准,在1989年被正式采用(American National Standard X3.159-1989),故称为 C89,也称为 ANSI C。

该标准随后被 ISO 采纳,成为国际标准(ISO/IEC 9899:1990)。

C89 的主要改动:

  • 定义了 C 标准库;
  • 新的预处理命令和特性;
  • 函数原型(prototype);
  • 新关键字:const、volatile、signed;
  • 宽字符、宽字符串和多字节字符;
  • 转化规则、声明(declaration)、类型检查的改变。

C95

这是对 C89 的一个修订和扩充,称为“C89 with Amendment 1”或 C95,严格说来并不是一个真正的标准。

C95 的主要改动:

  • 3个新标准头文件:iso646.h、wctype.h、wchar.h;
  • 一些新的标记(token)和宏(macro);
  • 一些新的 printf/scanf 系列函数的格式符;
  • 增加了大量的宽字符和多字节字符函数、常数和类型。

C99

1999年,在做了一些必要的修正和完善后,ISO 发布了新的 C 语言标准,命名为 ISO/IEC 9899:1999,简称“C99”。

C99 的主要改动:

  • 复数(complex);
  • 整数(integer)类型扩展;
  • 变长数组;
  • Boolean 类型;
  • 非英语字符集的更好支持;
  • 浮点类型的更好支持;
  • 提供全部类型的数学函数;
  • C++ 风格注释(//)。

C11

2007 年,C语言标准委员会又重新开始修订C语言,到了 2011 年正式发布了 ISO/IEC 9899:2011,简称为 C11 标准。

C11 标准新引入的特征尽管没 C99 相对 C90 引入的那么多,但是这些也都十分有用,比如:字节对齐说明符、泛型机制(generic selection)、对多线程的支持、静态断言、原子操作以及对 Unicode 的支持。

C17

C17(也被称为为 C18)是于2018年6月发布的 ISO/IEC 9899:2018 的非正式名称,也是目前(截止到2020年6月)为止最新的 C语言编程标准,被用来替代 C11 标准。

C17 没有引入新的语言特性,只对 C11 进行了补充和修正。

C2x

下一个版本的 C 标准,预计将于2022年12月1日完成。

有许多人提出想为 C 语言添加面向对象的特性,包括增加类、继承、多态等已被 C++ 语言所广泛使用的语法特性,但是最终被委员会驳回了。因为这些复杂的语法特性并不符合 C 语言的设计理念以及设计哲学,况且 C++ 已经有了这些特性,C 语言无需再对它们进行支持。


关于C语言历史与演化进程的详细介绍可参考维基百科:
https://en.wikipedia.org/wiki/C_(programming_language)

关注“人人都懂物联网”,了解更多物联网知识!

C99C11C17都是C语言标准规范。每个标准都对C语言的语法,数据类型,函数库和编译器行为做出了规定。 C99C语言的第三个标准,于1999年发布。它引入了一些新的功能,例如可变长度数组,复合文字,以及对于实数和复数的支持。C99还增加了新的编译指令和预处理器宏,以提高代码的可读性和可移植性。C99标准的目的是提供更好的编程工具和更强的类型检查,以便开发人员能够更容易地编写健壮的代码。 C11C语言的第四个标准,于2011年发布。它在C99的基础上进一步扩展了语言的功能和库支持。C11增加了对多线程编程的原生支持,并引入了原子操作和线程局部存储等新的特性。此外,C11还对内存模型和并发性做出了明确的规定,并提供了一些新的预定义宏来检测编译器的特性和支持程度。 C17C语言的第五个标准,于2018年发布。它修复了C11中的一些漏洞,并进行了一些小的改进。C17引入了一些新的库函数,并对一些现有的库函数进行了修改,以提供更好的性能和功能。此外,C17还对于对于内存模型和类型的处理做出了一些调整,以提高编程的可靠性和可移植性。 总结来说,C99C11C17都是C语言标准规范,它们分别于1999年,2011年和2018年发布。每个标准都引入了新的功能和改进,以提供更好的编程工具和更强的类型检查。开发人员可以参考这些标准来编写可靠且具有可移植性的C语言代码。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿基米东

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值