7

回答使用一些我认为不是标准 C 的函数 (sscanf_ssprintf_s) 的问题时,Daniel Fischer 提请我注意,这些函数在附录 K 中定义。

我普遍理解规范意味着它有助于定义标准。但是,传统上,C 标准的附件仅被视为提供信息。附录 K 在 C11 标准中被标记为规范性的。它定义了“安全”功能。

这是否意味着不提供这些函数的编译器不符合 C11 标准?

我只有 C11 标准草案,但它声明附件 K 是规范性的,但标准的库部分没有提及附件 K 中讨论的功能。运行时约束定义中的注释似乎暗示附件 K 定义了一个扩展。

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

4

2 回答 2

15

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

见 K.2 第 2 段:

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

带脚注:

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

第 3 段说:

子条款 K.3 应被视为已合并到第 7 节命名子条款的并行结构中。

这就是为什么没有必要在库部分第 7 条中提及它的原因(或者至少该标准的作者认为没有必要)。

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

于 2013-05-22T20:23:36.287 回答
3

从某种意义上说,它是“规范的”,声称支持附件 K 的实现必须满足其中的要求。这不是强制性的。

于 2013-05-22T20:12:59.050 回答