一致性实施是否需要 C11 中附件 K 的支持?

问题描述 投票:0回答:2

回答一个问题时使用了一些我认为不是标准C的函数(

sscanf_s
sprintf_s
)时,Daniel Fischer提醒我注意这些函数是在附录K中定义的。

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

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

我只有 C11 标准草案,但它指出附件 K 是规范性的,但标准的库部分没有提及附件 K 中讨论的功能。

runtime-constraint

定义中的注释似乎暗示附件 K 定义了一个扩展。

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

c language-lawyer c11 tr24731
2个回答
17
投票

参见 K.2 第 2 段:

定义
__STDC_LIB_EXT1__

的实现应符合 规格见本附件。


带有脚注:

未定义
__STDC_LIB_EXT1__

的实现不需要遵守这些 规格。


第 3 段说:

子条款 K.3 应该被理解为好像它被合并到并列中 第 7 条命名子条款的结构。

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

从 C11 开始,定义

__STDC_LIB_EXT1__

的实现必须将其定义为

201112L
; N1570 和发布的 C11 标准都出现了这个错误,但它在技术勘误表中得到了修复。
    


5
投票

© www.soinside.com 2019 - 2024. All rights reserved.