我的问题主要与第四节第六段有关。
两种形式的一致性实现是托管的和独立的。符合要求的托管实现应接受任何严格符合要求的程序。
据我了解,这构成了典型的应用程序环境,具有文件系统、分配的内存和线程......
符合标准的独立实现应接受任何严格符合标准的程序,其中库条款(第 7 条)中指定的功能的使用仅限于标准头文件
<float.h>
、<iso646.h>
、<limits.h>
、<stdalign.h>
、<stdarg.h>
、<stdbool.h>
、<stddef.h>
、<stdint.h>
和的内容<stdnoreturn.h>
。
...这构成了典型的内核和/或嵌入式、最小的环境,没有标准文件系统、分配的内存或线程(除其他外)。
一个符合要求的实现可能有扩展(包括额外的库函数),只要它们不改变任何严格符合的程序的行为。
似乎这使托管实现可以自由地将自己称为托管或独立实现,并且当涉及到文件系统、分配的内存或线程(以及其他事物)时,这些可以属于扩展类别,因此它只能实现一个接口,每次都返回一个指示错误的值。仅举几个:
fopen
,fgets
并且malloc
可以返回NULL
fprintf
,fscanf
,fputc
并且fgetc
可以返回EOF
thrd_create
可以返回thrd_error
(表示“请求无法被兑现”)
这意味着第四节、第六节给出的区别实际上是没有意义的。是否有任何要求可以保证这些功能在托管和独立实现中的某些实际功能级别?例如,是否要求上面的那些函数实际上能够返回它们相应的失败值以外的东西?