4. 标准顺从
1、在本国际标准中,“应该”被解释为对一个实现或一个程序的要求;相反地,“不该”被解释为禁用。
2、如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为是未定义的。否则,未定义行为在本国际标准中通过“未定义行为”这一短语或通过对任一显式定义的行为的缺省进行指定。在这三种表达方式之中没有特别的重点强调;它们都描述了“未定义的行为”。
3、在所有其它方面都正确的一个程序且操作正确的数据,却含有未指定的行为,那么应该是一个正确的程序并且其行为符号5.1.2.3。
4、实现不该成功翻译含有一个#error预处理指示符的预处理翻译单元,除非它是通过条件包含被跳过的一个组的一部分。
5、一个严格顺从本标准的程序应该只使用在本国际标准中所指定的那些语言特征和库。注:一个严格顺从标准的程序可以使用条件特征(见6.10.8.3),使用相关宏的一个适当条件包含预处理确保提供了对严格顺从本国际标准程序的使用。比如:
#ifdef __STDC_IEC_559__ /* 定义了FE_UNWARD */
/* ... */
fesetround(FE_UPWARD);
/* ... */
#endif
它不应该产生依赖于任一未指定的、未定义的以及实现自定义的行为,并且不应该超过任一最小实现的限制。
6、顺从标准的两种形式的实现是宿主实现和独立实现。一个顺从标准的住宿实现应该接受任一严格顺从标准的程序。一个顺从标准的独立实现应该接受任一严格顺从标准的程序,对在库条款(条款7)中所指定的特征的使用限于标准头<float.h>,<iso646.h>,<limits.h>,<stdalign.h>,<stdarg.h>,<stdbool.h>,<stddef.h>,<stdint.h>以及<stdnoreturn.h>内容的范围内。一个顺从标准的实现可以含有扩展(包括额外的库函数),他们不改变任一顺从标准程序的行为。注:这暗示了一个顺从标准的实现在本国际标准中所显式保留的标识符外不保留标识符。
7、一个顺从标准的程序是对于一个顺从标准的实现可接受的程序。注:严格顺从标准的程序目的在于在顺从标准的实现之间最大地达成可移植性。顺从标准的程序可以依赖于一个顺从标准的实现的不可移植的特征。
8、一个实现应该伴随其定义所有实现自定义以及区域特定特征和所有扩展的文档。