C11中附件K的支持是否符合实施要求?

jxh*_*jxh 7 c tr24731 language-lawyer c11

回答使用我认为不是标准C 的某些功能(sscanf_ssprintf_s)的问题时,Daniel Fischer提请我注意所涉及的功能在附件K中定义.

我一般都明白,规范意味着它有助于定义标准.但是,C标准的附件传统上仅被视为信息性的.附件K在C11标准中标注为规范性的.它定义了"安全"功能.

这是否意味着没有提供这些功能的编译器不符合C11标准?

我只能获得C11标准草案,但它指出附件K是规范性的,但标准的库部分没有提到附件K中讨论的功能.运行时约束定义中的注释似乎意味着附件K定义了一个扩展.

规范性附件是否仅定义了可选的扩展?

Kei*_*son 15

附件K是可选的; 它自己这么说.

见K.2第2段:

定义的实现__STDC_LIB_EXT1__应符合本附件中的规范.

用脚注:

未定义的实现__STDC_LIB_EXT1__不需要符合这些规范.

第3段说:

应将第K.3条视为合并为第7条命名条款的并行结构.

这就是为什么没有必要在图书馆部分第7条中提及它(或者至少标准的作者认为没有必要).

定义的实现__STDC_LIB_EXT1__必须将其定义为201112L; N1570和发布的C11标准都出错了,但它已在技术勘误中得到修正.


R..*_*R.. 5

它是“规范的”,因为声称支持附件 K 的实现必须满足其中的要求。这不是强制性的。

  • @user315052 “严格符合的程序可以使用条件功能(参见 6.10.8.3),前提是该使用受到使用相关宏的适当条件包含预处理指令的保护。” (4认同)