玩点虚的- C 语言的历史

本文详细阐述了C语言从起源到标准化的过程,包括不同版本之间的区别与改进,如K&R版与ANSI C的区别,以及C99与C90的主要变化。同时介绍了与C语言发展密切相关的组织与项目,如自由软件基金会与GNU计划。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                          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++ 的编译器,而是提供了一个编译器框架,任何编译型语言都可以利用该框架,轻松的写出自己的编译器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值