BCPL --------> B 语言 --------> New B --------> 早期的 C
Basic Combined Programming Language 解释而非编译 Dennis Ritchie
C 语言起源于 UNIX,UNIX API 的很大一部分都成为了 C 的标准库函数,具体请参见 http://blog.youkuaiyun.com/wellmikelan/article/details/8433149 。
1978 年,Brian Kernighan 和 Dennis Ritchie 出版了《The C Programming Language》,所以,该版本的 C 语言被称为 "K&R C"。
1983 年,ANSI 成立了 C 语言工作小组,开始了 C 语言的标准化工作,并于 1989 年被 ANSI 接纳,即 "ANSI C" 或 "C89"。而在 1990 年,该标准仅做了格式的部分变动后,被 ISO 接纳,即 "C90"。因此,"C89" 和 "C90" 可以认为是同一份标准。在 2000 年,ANSI 接纳了 ISO 提出的新标准,即 "C99"。在 2011 年,ANSI 接纳了 ISO 提出的另一份新标准,即 "C11",这是 C 语言的现行标准,而 C99 已经被 ISO 撤销。
简单列举 "K&R C" 和 "ANCI C" 的区别:
1. ANSI C 把形参的类型作为函数声明的一部分
2. ANSI C 正式增加了一些关键字,包括:enum 等,而 const,volatile,signed,void 也增加了各自相关的语义
3. 其它一些不常见的特性,例如:相邻的字符串字面值会被自动连接在一起。
简单列举 C99 与之前版本的区别:
1. ANSI C 中,只允许在 C99 模式下使用 for 循环初始化声明
2. C99 增加了 restrict 关键字,该关键字告诉编译器,哪些指针引用是可以优化的,具体见http://blog.youkuaiyun.com/wellmikelan/article/details/8878632 。gcc 默认使用的标准是 C89,欲测试该关键字,需加上选项 -std=c99
如同大多数标准一样,在批准标准和修改软件以使其符合标准这两者之间有一段时间上的延迟。随着供应商的编译系统不断演进,对 ANSI C 标准最新版本的支持也越来越多。gcc 对 ANSI C99 的当前符合程度的总结可见:
http://www.gnu.org/software/gcc/c99status.html
其它
1. Free Software Foundation, FSF 自由软件基金会,创始人为 Richard M.Stallman,其宗旨是“消除在计算机程序拷贝、重发布、理解和修改方面的限制”,想建立一个 UNIX 的自由软件实现方案,称为 GNU
2. GNU, GNU‘s Not Unix 其目的是实现一个完整的操作系统,供所有人免费使用。GNU 自己的内核 Hurd 仍然在开发中,现在的 GNU 通常使用 Linux 内核,这样的组合即称为 “GNU/Linux 操作系统”,很多使用者将其误称为 Linux
3. FSF 的作品,甚至说 RMS 的作品包括:Emacs、GDB、GCC。GDB 的全称是 GNU Debugger。GCC 的全称是 GNU Compiler Collection,GNU 编译器集合,它不止是 C/C++ 的编译器,而是提供了一个编译器框架,任何编译型语言都可以利用该框架,轻松的写出自己的编译器。