C 标准与C89/C99/C11
预计时间: 8分钟
C语言发展的时间表
年 | C 标准 |
---|---|
1972 | 诞生 |
1978 | K&R C |
1989/1990 | ANSI C and ISO C |
1999 | C99 |
2011 | C11 |
2017 | C17 |
待定 | C2x |
早期
C 的起源与Unix操作系统的开发密切相关,最初由 Dennis Ritchie 和 Ken Thompson在PDP-7上以汇编语言实现,并结合了同事的几个想法。最终,他们决定将操作系统移植到PDP-11上。Unix 的原始 PDP-11 版本也是用汇编语言开发的。
1971 年,Ritchie 开始改进 B,以便在更新、更强大的 PDP-11 上运行它。Thompson 开始使用 NB (改进后的B)编写 Unix 内核,他的需求决定了语言发展的方向。到 1972 年编译器名称更改为 C。在1973 年 11 月发布的版本 4 Unix中, Unix 内核被广泛地用 C 重新实现。
K&R C
1978 年,Brian Kernighan和Dennis Ritchie出版了《The C Programming Language》的第一版。这本书被 C 程序员称为 K&R,多年来一直作为该语言的非正式规范。它所描述的 C 版本通常被称为 K&R C 。由于它于 1978 年发布,因此也称为C78。本书的第二版涵盖了后来的ANSI C标准。
C89 或 C90 或 ANSI C 或 ISO C
最初的ANSI C标准(X3.159-1989)于1989年批准并于1990年发布。该标准于1990年晚些时候被批准为ISO标准(ISO/IEC 9899:1990)。这些出版物之间没有技术差异,尽管ANSI标准的各个部分已重新编号,并成为ISO标准中的子句。ANSI标准(而非ISO标准)也随附了Rationale文档。从批准之日起,该标准的两种形式通常称为C89,有时也称为C90。
在 1970 年代后期和 1980 年代,随着 C 语言的普及开始显着增加 ,C 版本被广泛用于包括IBM PC在内的各种大型计算机、小型计算机和微型计算机。
1983 年,美国国家标准协会(ANSI) 成立了一个委员会 X3J11,以建立 C 的标准规范。X3J11 基于 Unix 实现的 C 标准;然而,Unix C 库的不可移植部分被移交给IEEE 工作组1003,成为 1988 年POSIX标准的基础。1989 年,C 标准被批准为 ANSI X3.159-1989 “Programming Language C”。此版本的语言通常称为ANSI C、标准 C 或有时称为 C89。
1990 年,ANSI C 标准(带有格式更改)被国际标准化组织(ISO) 采用为 ISO/IEC 9899:1990,有时也称为 C90。因此,术语“C89”和“C90”指的是同一种编程语言。
ANSI 与其他国家标准机构一样,不再独立开发 C 标准,而是遵循由工作组ISO/IEC JTC1/SC22 /WG14 维护的国际 C 标准。国际标准更新的国家采用通常发生在 ISO 发布后的一年内。
当前的 C 编译器支持 C89,大多数现代 C 代码都基于它。任何仅用标准 C 编写且没有任何与硬件相关的假设的程序都将在其资源限制内在任何具有符合 C 实现的平台上正确运行。如果没有这些预防措施,程序可能只能在特定平台或特定编译器上编译,例如,由于使用了非标准库,例如GUI库,或者依赖于编译器或平台特定的属性,例如作为数据类型和字节字节序的确切大小。
在代码必须由符合标准的编译器或基于 K&R C 的编译器编译的情况下,__STDC__
宏可用于将代码拆分为标准和 K&R 部分,以防止在基于 K&R C 的编译器上使用仅在标准中可用的功能C。
在 ANSI/ISO 标准化过程之后,C 语言规范在几年内保持相对静止。
C94 或 C95
1995年发布了对1990年标准的修订。修订后的标准有时称为C94或 C95。
C99
ISO C标准的新版本于1999年发布,名称为ISO / IEC 9899:1999,通常称为C99。
C11
C标准的第四个版本称为C11,于2011年发布为 ISO/IEC 9899:2011
。
C17
C17 于 2018 年 6 月发布,是 C 编程语言的当前标准。它没有引入新的语言特性,只引入了技术更正和对 C11 中缺陷的澄清。标准宏__STDC_VERSION__
定义为201710L
.
C2x
C2x 是下一个(C17 之后)主要 C 语言标准修订版的非正式名称。预计将在 2023 年进行投票,因此将被称为 C23。
嵌入式 C
从历史上看,嵌入式 C 编程需要对 C 语言进行非标准扩展,以支持诸如定点算术、多个不同内存库和基本 I/O 操作等奇异特性。
2008 年,C 标准委员会发布了一份扩展 C 语言的技术报告,通过为所有实现提供要遵守的通用标准来解决这些问题。它包括许多普通 C 语言中不具备的特性,例如定点算术、命名地址空间和基本 I/O 硬件寻址。
C 标准规范草案
- ISO/IEC JTC1/SC22/WG14 - C
- C89/C90
- ansi-iso-9899-1990-1.pdf
- n1256.pdf is a freely available draft of the C99 standard.
- n1570.pdf is a freely available draft of the C11 standard.
- C99RationaleV5.10.pdf Rationale for International Standard Programming Languages C
C 标准库
许多 Linux 发行版目前使用 glibc 来实现 C 标准库。
常见的替代品包括 musl libc 、diet libc 、uClibc 和 Bionic
最后更新时间为2021年03月08日