网站首页 > 技术教程 正文
C 语言作为一门历史悠久且广泛使用的编程语言,其发展过程中经历了多次标准化,以确保语言的统一性、可移植性和稳定性。这些标准定义了 C 语言的语法、语义以及标准库的功能。
以下是 C 语言的主要标准版本,按时间顺序排列:
* K&R C (非官方标准)
* 来源: 1978 年布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合著的第一版《C 程序设计语言》(The C Programming Language)。
* 地位: 虽然不是正式的官方标准,但它是 C 语言最早的、影响最深远的描述,是早期 C 语言事实上的规范。现代 C 标准在此基础上进行了许多改进和扩展。
* C89 / C90 (ANSI C / ISO C)
* 名称: ANSI C (由美国国家标准协会制定) 或 ISO C (由国际标准化组织采纳)。
* 正式编号: ANSI X3.159-1989 (1989年发布),ISO/IEC 9899:1990 (1990年发布)。
* 地位: 这是第一个官方的、国际性的 C 语言标准。它奠定了现代 C 语言的基础,规范了许多 K&R C 中模糊或依赖于具体实现的行为。通常我们说的“标准 C”很多时候指的就是这个版本。C90 与 C89 内容基本完全一致。
* C95 (Amendment 1)
* 正式编号: ISO/IEC 9899:1990/Amd.1:1995 (1995年发布)。
* 地位: 这是对 C90 的一个小型修订和补充(修正案),增加了一些特性,如:
* 宽字符库 (<wchar.h>, <wctype.h>) 的改进。
* 增加了双字符组(Digraphs)。
* 一些宏定义的标准化。
* C99
* 正式编号: ISO/IEC 9899:1999 (1999年发布)。
* 地位: C 语言的一次重要修订,引入了大量新特性,旨在提高 C 语言的表达能力和与 C++ 的兼容性,并适应现代计算需求。主要特性包括:
* 内联函数 (inline functions)。
* 变量长度数组 (Variable Length Arrays - VLA)(在 C11 中变为可选特性)。
* 增加了 long long int 整数类型。
* 支持 单行注释 (//)。
* 布尔类型 (<stdbool.h>)。
* 精确宽度整数类型 (<stdint.h>)。
* 复数支持 (<complex.h>)。
* 指定初始化器 (Designated initializers)。
* 复合字面量 (Compound literals)。
* 改进的数学库 (<math.h>, <tgmath.h>)。
* 允许在代码块任意位置声明变量。
* C11
* 正式编号: ISO/IEC 9899:2011 (2011年发布)。
* 地位: 对 C99 的又一次修订,引入了一些现代编程语言的特性,并对部分 C99 特性进行了调整。主要特性包括:
* 多线程支持 (<threads.h>)。
* 原子操作 (<stdatomic.h>)。
* 类型泛型宏 (<tgmath.h> 在 C99 引入,C11 进一步完善)。
* 静态断言 (_Static_assert)。
* 匿名结构体和联合体。
* _Noreturn 函数说明符。
* 对齐控制 (<stdalign.h>, _Alignas, _Alignof)。
* Unicode 支持 (<uchar.h>)。
* 可选特性: VLA 和 _Complex 变为可选支持,新增可选的边界检查接口 (Annex K)。
* C17 (也常被称为 C18)
* 正式编号: ISO/IEC 9899:2018 (2018年发布)。
* 地位: 这主要是对 C11 的一个 技术修正和缺陷修复版本,并没有引入重要的新语言特性。它的目标是澄清 C11 标准中的模糊之处,并整合之前的技术勘误 (Technical Corrigenda)。因此,C17 通常被视为 C11 的稳定版本。目前 (截至 2025 年初),C17 是被各大编译器广泛支持和推荐的稳定 C 语言标准。
* C23
* 正式编号: ISO/IEC 9899:2024 (预计的正式发布编号,通常称为 C23)。
* 地位: C 语言的最新主要修订版本,已经完成制定,编译器正在逐步实现其特性。它旨在进一步现代化 C 语言,并引入许多开发者期待已久的功能。一些主要特性包括:
* 正式引入 nullptr 常量和对应的 nullptr_t 类型。
* 二进制整型常量 (如 0b101010) 和 printf/scanf 的 %b 格式说明符。
* 数字分隔符 (如 1'000'000)。
* bool, true, false 成为正式关键字 (不再需要 <stdbool.h>)。
* 属性语法 ([[attribute]])。
* typeof 操作符。
* 十进制浮点数类型 (_Decimal*)。
* 空初始化器 {}。
* 标准库增加 memccpy, strdup, strndup 等函数。
* 移除三字符组 (Trigraphs)。
* 移除 K&R 风格的函数定义。
总结:
* C 语言标准是不断演进的。
* C89/C90 是基础标准。
* C99 和 C11 引入了大量重要的新特性。
* C17 是 C11 的稳定和修正版,是当前广泛使用的标准。
* C23 是最新的标准,带来了更多现代化改进,正在逐渐被编译器支持。
在实际开发中,可以通过编译器选项(例如 GCC/Clang 的 -std=c99, -std=c11, -std=c17, -std=c2x 等)来指定希望遵循的 C 标准版本。
猜你喜欢
- 2025-04-30 关于面向对象编程思想的一些思考(面向对象编程六大原则)
- 2025-04-30 C 语言标准(c 语言标准库谁写的)
- 2025-04-30 C语言标准,ANSI C,ISO C,GNU C(c语言标准库参考手册)
- 2025-04-30 适合零基础初学者学习C语言第一课教程,揭开C语言的神秘面纱
- 2025-04-30 C语言简介(c语言简介及基础)
- 2025-04-30 C语言的来世与今生(c语言的来世与今生的区别)
- 2025-04-30 丹尼斯·斯科特获得了魔术系列的终极荣誉
- 2025-04-30 这个比乔布斯还牛的男人,死后却无人问津|乔布斯逝世十周年
你 发表评论:
欢迎- 04-30关于面向对象编程思想的一些思考(面向对象编程六大原则)
- 04-30C 语言标准(c 语言标准库谁写的)
- 04-30C语言标准,ANSI C,ISO C,GNU C(c语言标准库参考手册)
- 04-30适合零基础初学者学习C语言第一课教程,揭开C语言的神秘面纱
- 04-30C语言简介(c语言简介及基础)
- 04-30C语言的来世与今生(c语言的来世与今生的区别)
- 04-30丹尼斯·斯科特获得了魔术系列的终极荣誉
- 04-30c语言的标准(c语言的标准函数名有哪些)
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)