C headers 一致性

C headers conformance

我正在寻找 C 标准库的列表 headers 一致性报告 - 如,其中 headers 是可选的,对于符合标准的编译器是强制性的 - 对于所有 C 标准(或 C20至少)。

cppreference.com 将为您提供 C89 到 C23 和 C++98 到 C++23 的所有标准。虽然没有 C20 标准,C17 是最后一个,C23 是下一个。

C17(当前的 C 标准)将标准 headers 列为:

<assert.h>      <math.h>            <stdlib.h>
<complex.h>     <setjmp.h>          <stdnoreturn.h>
<ctype.h>       <signal.h>          <string.h>
<errno.h>       <stdalign.h>        <tgmath.h>
<fenv.h>        <stdarg.h>          <threads.h>
<float.h>       <stdatomic.h>       <time.h>
<inttypes.h>    <stdbool.h>         <uchar.h>
<iso646.h>      <stddef.h>          <wchar.h>
<limits.h>      <stdint.h>          <wctype.h>
<locale.h>      <stdio.h>

标准在第 7.1.2 节“标准 headers”的脚注中说明了这一点:

The headers <complex.h>, <stdatomic.h>, and <threads.h> are conditional features that implementations need not support; see 6.10.8.3

第 6.10.8.3 节(“条件特征宏”)反过来对那些 headers:

__STDC_NO_ATOMICS__ The integer constant 1, intended to indicate that the implementation does not support atomic types (including the _Atomic type qualifier) and the <stdatomic.h> header.

__STDC_NO_COMPLEX__ The integer constant 1, intended to indicate that the implementation does not support complex types or the <complex.h> header.

__STDC_NO_THREADS__ The integer constant 1, intended to indicate that the implementation does not support the <threads.h> header.

最后,C17 关于“符合标准的独立式”实现(第 4 节“标准”)说了这一点:

A conforming freestanding implementation shall accept any strictly conforming program in which the use of the features specified in the library clause (clause 7) is confined to the contents of the standard headers <float.h>, <iso646.h>, <limits.h>, <stdalign.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, stdint.h>, and <stdnoreturn.h>.