本文记述了C语言自20世纪70年代至今的历史及发展。

早期發展
----

肯·汤普逊和丹尼斯·里奇，是C程式語言的开发者.
C語言最早由丹尼斯·里奇（Dennis Ritchie）為了在PDP-11電腦上運行的Unix系統所設計出來的程式語言，第一次發展在1969年到1973年之間。

C源于BCPL语言，后者由馬丁·理察德（Martin Richards）于1967年左右设计实现。BCPL是一门"无类型"的编程语言：它仅能操作一种数据类型，即机器字（machine word）。1970年，肯·汤普逊为运行在PDP-7上的首个Unix系统设计了一个精简版的BCPL，这个语言被称为B语言，它也是无类型的。

Unix最早運行在PDP-7上，是以組合語言寫成。在PDP-11出现後，丹尼斯·里奇與肯·汤普逊着手將Unix移植到PDP-11上，无类型的语言在PDP-11上愈发显得不合适。PDP-11提供了多种不同规格大小的基本对象：一字节长的字符，两字节长的整型数以及四字节长的浮点数。B语言无法处理这些不同规格大小的对象，也没有提供单独的操作符去操作它们。

C语言最初尝试通过向B语言中增加数据类型的想法来处理那些不同类型的数据。和大多数语言一样，在C中，每个对象都有一个类型以及一个值；类型决定了可用于值的操作的含义，以及对象占用的存储空间大小。

1973年，Unix作業系統的核心正式用C語言改寫，這是C語言第一次應用在作業系統的核心編寫上。

1975年C语言开始移植到其他机器上使用。史蒂芬·強生（英语：）实现了一套「可移植编译器」，这套编译器修改起来相对容易，并且可以为不同的机器生成代码。从那时起，C在大多数计算机上被使用，从最小的微型计算机到与CRAY-2超级计算机。C语言很规范，即使没有一份正式的标准，你也可以写出C程序，这些程序无须修改就可以运行在任何支持C语言和最小运行时环境的计算机上。

C最初在小型机器上实现，并且继承了一系列小语种编程语言的特点；与功能相比，C的设计者更倾向于简单和优雅。此外，从一开始，C语言就是为系统级编程而设计，程序的运行效率至关重要，因此，C语言与真实机器能力的良好匹配也就不足为奇。例如，C语言为典型硬件所直接支持的对象：字符，整数（也许有多种大小），以及浮点数（同样可能有多种大小）提供了相应的基本数据类型。

K&R C
-----

《C程序设计语言》第一版封面
1978年，丹尼斯·里奇和布萊恩·柯林漢合作出版了《C程序设计语言》的第一版。書中介紹的C語言標準也被C語言程式設計師稱作"K&R C"（柯里C），第二版的書中也包含了一些ANSI C的標準。

K&R C主要引入了以下语言特性：

* 标准I/O库
* 结构（`struct`）类型
* 长整数（`long int`）类型
* 无符号整数（`unsigned int`）类型
* 把运算符`=+`和`=-`改为`+=`和`-=`。因为`=+`和`=-`會使得編譯器不知道使用者要處理`i = -10`還是`i =- 10`，使得處理上產生混淆。

即使在後來ANSI C標準被提出的許多年後，K&R C仍然是許多編譯器的最低標準要求，許多老舊的編譯仍然運行K&R C的標準。

ANSI C 和 ISO C
--------------

条目：ANSI C
1989年，C语言被美國國家標準協會（ANSI）标准化，編號為ANSI X3.159-1989。這個版本又稱為C89。标准化的一个目的是扩展K&R C，增加了一些新特性。

* void 函数
* 函数可以返回 struct 或 union 类型
* void \* 数据类型

1990年，国际标准化组织（ISO）成立 ISO/IEC JTC1/SC22/WG14 工作组，来规定国际标准的C语言，通过对ANSI标准的少量修改，最终製定了 ISO 9899:1990，又稱為C90。随后，ANSI亦接受國際標準C，並不再發展新的C標準。

K&R C语言到ANSI/ISO标准C语言的改进包括：

* 增加了真正的标准库
* 新的预处理命令与特性
* 函数原型允许在函数申明中指定参数类型
* 一些新的关键字，包括 const、volatile 与 signed
* 宽字符、宽字符串与多字节字符
* 对约定规则、声明和类型检查的许多小改动与澄清

WG14工作小组之後又於1994年，对1985年颁布的标准做了两处技术修订（缺陷修复）和一个补充（扩展）。下面是 1994 年做出的所有修改：

* 3 个新的标准库头文件 iso646.h、wctype.h 和 wchar.h
* 几个新的记号与预定义宏，用于对国际化提供更好的支持
* printf/sprintf 函数一系列新的格式代码
* 大量的函数和一些类型与常量，用于多字节字符和宽字节字符

C99
---

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

C11
---

条目：C11 (C语言标准)
2011年12月8日，ISO正式发布了新的C语言的新标准C11（之前被称为C1X），官方名称为ISO/IEC 9899:2011。新的标准提高了对C++的兼容性，并增加了一些新的特性。这些新特性包括泛型、多執行緒、帶邊界檢查的函式、匿名結構等。

C18
---

条目：C18 (C語言標準)
C18没有引入新的语言特性，只对C11进行了补充和修正。

C2x
---

条目：C23 (C語言標準)

C2x引入了一些新特性。目前可以确定的是，C2x标准将加入符合IEEE标准的十进制浮点数，这使得计算机能够精确地储存浮点数。

参考资料
----

1. ↑   Stephen Prata.. 北京: 人民邮电出版社. 2005年2月: 3-4  [2020-06-10]. ISBN 9787115130228 （中文）.
2. ↑   Dennis M. Ritchie,Brian W. Kernighan.. 北京: 机械工业出版社. 2004年1月  [2020-06-10]. ISBN 9787111128069 （中文）.
3. ↑   Stephen Prata.. 北京: 人民邮电出版社. 2005年2月: 12  [2020-06-10]. ISBN 9787115130228 （中文）.
4. ↑ .  [2020-06-10]. （原始内容存档于2020-06-13）.
5. ↑   (PDF).  [2020-06-10]. （原始内容存档 (PDF)于2018-03-29）.
6. ↑   (PDF).  [2020-06-10]. （原始内容存档 (PDF)于2020-07-22）.
7. ↑   (PDF).  [2020-06-10]. （原始内容存档 (PDF)于2020-06-10）.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
C语言 |
| --- |
|  |
| 
* 《C程序设计语言》（K&R C）
* 历史
* ANSI C
* C99
* C11
* C18
* C23
* 嵌入式C语言
* MISRA C

 |
|  |
| 特性 | 
* Functions
* 头文件
* 字符串
* 语法
* 预处理器
* 数据类型
* 指针

 |
|  |
| 函式庫 | 
* glibc
* C標準函式庫
* C POSIX library
* Dietlibc
* uClibc
* Newlib
* EGLIBC
* Bionic
* klibc
* musl

 |
|  |
| 編譯器 | 
* Clang
* GCC
* MSVC
* Intel C++
* Borland Turbo C
* LCC
* Pelles C
* PCC
* TCC
* C++/CLI
* C++/CX
* Watcom C/C++ 编译器

 |
|  |
| C與其他的程式語言 | 
* C与C++
	+ 兼容性
	+ 運算子
* Pascal与C的比较（英语：）
* C to Java byte-code compiler

 |
|  |
| 派生的程式語言 | 
* C++
* C#
* Objective-C
* D語言
* Alef（英语：）
* Limbo
* Go
* Vala

 |
|  |
| 
* C/C++的整合開發環境
* 分类 **分类**

 |

 |