C 的历史
早期 C
- 1969 :基于 BCPL 创建 B ,以作为 Unix 的系统程序语言替代 PDP-7 汇编器
- 增加运算符 ++ 、 -- 、复合赋值,保持为类 BCPL 的无类型语言
- 1971 :于将 B 移植到 PDP-11 时创建 NB (新“ B ”)
- 类型( int 、 char 、数组与指针)、数组到指针转换、到机器码的编译
- 1972 :语言更名为 C
- 结构体、运算符 && 及 || 、预处理器、可移植 I/O
- 1973 :以 C 重写
- 无符号整数、 long 、联合体、枚举、增强的类型安全
- 1978 : The C Programming Language ,第1版
标准 C
- 1983 : ANSI 建立 X3J11 委员会
- 1988 : The C Programming Language ,第2版
- 1989 :
C89
,ANSI C 标准出版
- 代码化的既存实践
- 新特性 :volatile 、 enum 、有符号整数 、 void 、本地环境
- 来自 C++ : const 、函数原型
- 1990 :
C90
,ANSI C 标准被接纳为 ISO/IEC 9899-1990 - 1995 :
C95
( ISO/IEC 9899 AM1 )(在线商店)
- 极大扩充了宽和多字节字符支持( wctype.h 、 wchar.h 、对流 I/O 的添加和更改等)
- 双标符、 iso646.h
- 1995 :技术勘误 1( ISO/IEC 9899 TCOR1 )
- 1996 :技术勘误 2( ISO/IEC 9899 TCOR2 )
- 1999 :
C99
( ISO/IEC 9899:1999 )
- 新特性: _Bool 、 long long 、 stdint.h 、 inttypes.h 、 restrict 、复合字面量、变长度数组、伸缩数组成员、指代初始化器、 fenv.h 、变参数宏、复数、 __func__ 、十六进制浮点格式( %a )、 lconv 的货币格式化、 isblank 、窄与宽字符串字面量的连接、枚举的尾逗号、类函数宏的空参数、 STDC_* pragma 、 va_copy 、 tmpnam 的空返回、 setvbuf 中的空指针、 printf 的 hh 与 ll 长度指定符、 snprintf 、 _Exit 、 tgmath.h 、仿 POSIX strftime 指定符
- 来自 C++ : inline 、声明与代码混合、 for 循环的 init 子句中的声明、
//
注释、源代码中的通用字符名 - 移除隐式函数声明和隐式 int
- 2001 :技术勘误 1 ( ISO/IEC 9899:1999/Cor.1:2001(E) )
- 2004 :技术勘误 2 ( ISO/IEC 9899:1999/Cor.2:2004(E) )
- 2004 :Unicode TR( ISO/IEC TR 19769:2004 )( ISO商店)(2013-11-07 方案)
- 2007 :技术勘误 3 ( ISO/IEC 9899:1999/Cor.3:2007(E) )( 2007-09-07方案)
- 弃用 gets
- 2007 :边界检查接口 TR( ISO/IEC TR 24731-1:2007 )( ISO 商店)( 2007-03-28 方案)
- 2008 :嵌入式 TR ( ISO/IEC TR 18037:2008 )( ISO商店)( 2003-09-24 方案)
- 2009 :十进制浮点数 TR( ISO/IEC TR 24732:2009 )( ISO 商店)( 2007-07-05 方案)
- 2009 :特殊数学函数 TR( ISO/IEC TR 24747:2009 )( ISO 商店)(2006-08-02 方案)
- 2010 :动态分配函数 TR( ISO/IEC TR 24731-2:2010 )( ISO 商店)(2007-08-15 方案)
- 2011 :
C11
( ISO/IEC 9899:2011 )( ISO 商店)( ANSI 商店)(2011-04-12 方案)
- 具线程的内存模型 、 stdatomic.h 、 threads.h 、泛型函数、 _Alignas/_Alignof 、 _Noreturn 、 _Static_assert 、可分析性扩展、对复数和虚数类型的扩展、匿名结构体与联合体、独占文件打开模式、 quick_exit
- 移除 gets
- 来自边界检查接口 TR :边界检查接口
- 来自 Unicode TR : char16_t 、 char32_t ,及 uchar.h
- 2012 :技术勘误 1 ( ISO/IEC 9899:2011/Cor 1:2012 )( ISO 商店)
- 修正 DR 411
- 2013 :安全代码规则 TS ( ISO/IEC TS 17961:2013 )( ISO 商店)( 2012-12-26 方案)
- 2014 :FP TS 部分 1 :二进制浮点算术( ISO/IEC TS 18661-1:2014 )( ISO 商店)( 2013 方案)
- 提供对 C11 的更改(主要对附录 F ),以覆盖所有基本要求及一些 IEC 60559:2011 的推荐( C11 构建于 IEC 60559:1989 )
- 提供对 C11 的更改,以支持所有要求,加上一些 IEC 60559:2011 对十进制浮点算术的基本推荐。它替代了 ISO/IEC TR 24732:2009 。
- 提供对C11的更改,以支持IEC 60559:2011对扩展浮点格式及交换格式的推荐,包括算术和非算术。
- 提供对 C11 的更改,以支持所有 IEC 60559:2011 推荐的数学运算,包括 π 单位的三角函数、平方根倒数、复利等。
- 提供对 C11 的更改,以支持所有 IEC 60559:2011 推荐的补充属性(求值模型、异常处理、可再现性等)
- 包含弃用 ATOMIC_VAR_INIT 和对下列缺陷报告的修正:
未来发展
- 并行 TS (方案 n2017 2016-03-10 )
- 事务性内存 TS (方案 n1961 2015-09-23 )
-
C2x
(方案 n2479 2020-02-05 )下个主要 C 语言标准版本
- 来自 TS (语言):十进制浮点类型
- 来自 C++ (语言):单参数
_Static_assert
、属性、 u8 字符常量、移除旧式函数声明与函数定义 - 来自 TS (库):扩展的二进制浮点算术、十进制浮点算术
- 来自 POSIX (库): strndup() 、 asctime_r() 、 ctime_r() 、 gmtime_r() 、 localtime_r()
- 未授予 DR 状态的问题列表: n2297 (2018-09-24)
- C11 后缺陷报告列表(包含为 C2x 安排者) n2396 (2019-04)
参阅
引用
- C 语言的发展 Dennis M. Ritchie
- C99 标准基本原理