命名空间
变体
操作

一致性

来自 cppreference.cn
< c‎ | 语言

一致性具有三重定义

  • 严格一致程序 - 仅使用定义良好的语言结构,即具有单一行为的结构。它不包括未指明、未定义或实现定义的行为,并且不超过任何最小实现限制。
  • 一致程序 - 可被一致实现接受。
  • 一致实现 -
    • 一致的宿主实现应接受任何严格一致程序。
    • 一致的独立实现应接受任何严格一致程序,其中库子句(子句 7)中指定特性的使用仅限于独立标准库头文件(见下文)的内容。
    • 一致实现可以有扩展(包括额外的库函数),前提是它们不改变任何严格一致程序的行为。

目录

[编辑] 解释

标准没有定义翻译单元的任何最小实现限制。宿主环境具有操作系统;独立环境则没有。在宿主环境中运行的程序可以使用库子句(子句 7)中描述的所有特性;在独立环境中运行的程序可以使用子句 4 要求的库特性子集。

[编辑] 独立标准库头文件

独立实现必须提供所有完全独立头文件中的所有标准库特性。

某些标准库头文件是有条件独立的。

  • 如果实现预定义了宏 __STDC_IEC_60559_BFP____STDC_IEC_60559_DFP__,则 <math.h><fenv.h> 是完全独立头文件。然而,只有在程序不将 FENV_ACCESS 编译指示的状态设置为 ON 的情况下,这些头文件中的函数的行为才要求在独立环境中定义良好。

某些标准库头文件是部分独立的。

  • <stdlib.h> 中,memalignment 是独立的。此外,当预定义 __STDC_IEC_60559_BFP____STDC_IEC_60559_DFP__ 时,数字转换函数(atoXstrtoXstrfromX)也是独立的,但只有在程序不将 FENV_ACCESS 编译指示的状态设置为 ON 的情况下,它们的行为才要求在独立环境中定义良好。独立实现不需要提供 <stdlib.h> 中的任何其他组件。
  • <string.h> 中,strdupstrndupstrcollstrxfrmstrtokstrerror 不需要由独立实现提供。
(自 C23 起)
完全独立标准库头文件
<float.h> 浮点类型限制
<iso646.h> (C95 起) 备用运算符拼写
<limits.h> 整数类型范围
<stdalign.h> (C11 起) alignasalignof 便利宏
<stdarg.h> 可变参数
<stdbool.h> (C99 起) 布尔类型宏
<stddef.h> 通用宏定义
<stdint.h> (C99 起) 固定宽度整数类型
<stdnoreturn.h> (C11 起) noreturn 便利宏
<stdbit.h> (C23 起) 处理类型字节和位表示的宏
有条件完全独立标准库头文件
<fenv.h> (C23 起) 浮点环境
<math.h> (C23 起) 通用数学函数
部分独立标准库头文件
<stdlib.h> (C23 起) 通用工具:内存管理程序工具字符串转换随机数算法
<string.h> (C23 起) 字符串处理

[编辑] 参考

  • C23 标准 (ISO/IEC 9899:2024)
  • 4 一致性 (p: 9-10)
  • C17 标准 (ISO/IEC 9899:2018)
  • 4 一致性 (p: 4)
  • C11 标准 (ISO/IEC 9899:2011)
  • 4 一致性 (p: 8-9)
  • C99 标准 (ISO/IEC 9899:1999)
  • 4 一致性 (p: 7-8)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 1.7 符合性

[编辑] 另见

C++ 文档 关于 独立与宿主实现