C 的历史

< c‎ | language

早期 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 标准出版
  1. 代码化的既存实践
  2. 新特性 :volatile 、 enum 、有符号整数 、 void 、本地环境
  3. 来自 C++ : const 、函数原型
  • 1990 : C90 ,ANSI C 标准被接纳为 ISO/IEC 9899-1990
  • 1995 : C95 ( ISO/IEC 9899 AM1 )(在线商店
  1. 极大扩充了宽和多字节字符支持( wctype.h 、 wchar.h 、对流 I/O 的添加和更改等)
  2. 双标符、 iso646.h
  • 1995 :技术勘误 1( ISO/IEC 9899 TCOR1 )
  • 1996 :技术勘误 2( ISO/IEC 9899 TCOR2 )
  • 1999 :C99 ( ISO/IEC 9899:1999 )
  1. 新特性: _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 指定符
  2. 来自 C++ : inline 、声明与代码混合、 for 循环的 init 子句中的声明、 // 注释、源代码中的通用字符名
  3. 移除隐式函数声明和隐式 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方案
  1. 具线程的内存模型 、 stdatomic.h 、 threads.h 、泛型函数、 _Alignas/_Alignof 、 _Noreturn 、 _Static_assert 、可分析性扩展、对复数和虚数类型的扩展、匿名结构体与联合体、独占文件打开模式、 quick_exit
  2. 移除 gets
  3. 来自边界检查接口 TR :边界检查接口
  4. 来自 Unicode TR : char16_t 、 char32_t ,及 uchar.h
  • 2012 :技术勘误 1 ( ISO/IEC 9899:2011/Cor 1:2012 )( ISO 商店
  • 2013 :安全代码规则 TS ( ISO/IEC TS 17961:2013 )( ISO 商店)( 2012-12-26 方案)
  • 2014 :FP TS 部分 1 :二进制浮点算术( ISO/IEC TS 18661-1:2014 )( ISO 商店)( 2013 方案
  1. 提供对 C11 的更改(主要对附录 F ),以覆盖所有基本要求及一些 IEC 60559:2011 的推荐( C11 构建于 IEC 60559:1989 )
  • 2015 :FP TS 部分 2 :十进制浮点算术( ISO/IEC TS 18661-2:2015 )( ISO 商店) ( 2015 方案
  1. 提供对 C11 的更改,以支持所有要求,加上一些 IEC 60559:2011 对十进制浮点算术的基本推荐。它替代了 ISO/IEC TR 24732:2009 。
  • 2015 :FP TS 部分 3 :交换及扩展类型( ISO/IEC TS 18661-3:2015 )( ISO 商店)( 2015 方案
  1. 提供对C11的更改,以支持IEC 60559:2011对扩展浮点格式及交换格式的推荐,包括算术和非算术。
  • 2015 :FP TS 部分 4 :补充的函数( ISO/IEC TS 18661-4:2015 )( ISO 商店)( 2015 方案
  1. 提供对 C11 的更改,以支持所有 IEC 60559:2011 推荐的数学运算,包括 π 单位的三角函数、平方根倒数、复利等。
  • 2016 :FP TS 部分 5 :补充的属性( ISO/IEC TS 18661-5:2016 )( ISO 商店)( 2016 方案
  1. 提供对 C11 的更改,以支持所有 IEC 60559:2011 推荐的补充属性(求值模型、异常处理、可再现性等)
包含弃用 ATOMIC_VAR_INIT 和对下列缺陷报告的修正:
C17 中修正的缺陷报告( 54 个缺陷)

未来发展

  • 并行 TS (方案 n2017 2016-03-10 )
  • 事务性内存 TS (方案 n1961 2015-09-23 )
  • C2x (方案 n2479 2020-02-05 )下个主要 C 语言标准版本
  1. 来自 TS (语言):十进制浮点类型
  2. 来自 C++ (语言):单参数 _Static_assert属性u8 字符常量、移除旧式函数声明函数定义
  3. 来自 TS (库):扩展的二进制浮点算术、十进制浮点算术
  4. 来自 POSIX (库): strndup()asctime_r()ctime_r()gmtime_r()localtime_r()
  5. 未授予 DR 状态的问题列表: n2297 (2018-09-24)
  6. C11 后缺陷报告列表(包含为 C2x 安排者) n2396 (2019-04)

参阅

引用