目录:https://blog.csdn.net/qq_37422196/article/details/135239820
在此国际标准中,“应该”被解释为对实现或程序的要求;相反,“不应该”被解释为禁止。
如果“应该”或是“不应该”的要求被破坏,则行为未定义。在本国际标准中,未定义行为还可以通过术语“未定义行为”和不给出任何行为定义来表示。这三者之间并无区别,都是“未定义行为”。
如果一个程序在所有其他方面都是正确的,在正确的数据上运行,即使包含未指定的行为,它也应该是一个正确的程序,其行为应符合 5.1.2.3 的规定。
除非因条件包含而跳过,否则实现不应对包含 #error
预处理指令的源代码成功完成预处理。
严格一致性程序 只能使用本国际标准中规定的语言和程序库的功能。程序不得产生依赖于任何未指定、未定义或实现定义行为的输出,也不得超出任何最低实现限制。
注:严格一致性程序可以使用本标准中的可选功能(例如附录 F 中的浮点特性),只要确保相关部分有 #ifdef
检查相关的宏即可。例如:
#ifdef __STDC_IEC_559__
/* ... */
fesetround(FE_UPWARD);
/* ... */
#endif
一致实现 有两种不同形式:宿主和独立。一致宿主实现 应该接受所有的严格一致性程序,而 一致独立实现 应该接受所有不使用复数类型且只使用 <float.h>
、<iso646.h>
、<limits.h>
、<stdarg.h>
、<stdbool.h>
、<stddef.h>
、<stdint.h>
标头部分标准库(见第7章)的严格一致性程序。一致实现可以有扩展功能(例如额外库函数),只要其能保证严格一致性程序的行为不变。
注:这意味着一致实现除了本国际标准明确指出的保留词外不能保留其他标识符。
一致性程序 指某个一致实现能接受的程序。
注:严格一致性程序旨在在不同的一致实现中获得最大的可移植性,而一致性程序可以依赖特定一致环境的不可移植特性。
实现应当附带一个定义所有实现定义行为,本地化特征和所有扩展功能的文档。
前向引用:条件包含(6.10.1)、error 指令(6.10.5)、浮点类型特征(7.7)、替代拼写(7.9)、整型大小(7.10)、可变参数(7.15)、布尔类型及其值(7.16)、通用定义(7.17)、整型(7.18)。