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

时间:2013-05-22 19:57:48

标签: c language-lawyer c11 tr24731

虽然answering a question使用了我认为不是标准C的某些函数(sscanf_ssprintf_s),但Daniel Fischer提请我注意所讨论的函数是在附件K。

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

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

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

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

2 个答案:

答案 0 :(得分:15)

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

见K.2第2段:

  

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

脚注:

  

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

第3段说:

  

应该读取子条款K.3,就好像它被合并到并行中一样   第7条命名的子条款的结构。

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

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

答案 1 :(得分:3)

在声称支持附件K的实施必须符合其中的要求的意义上,它是“规范性的”。这不是强制性的。