首页 > 解决方案 > C 头文件一致性

问题描述

我正在寻找 C 标准库头文件一致性报告的列表——例如,哪些头文件是可选的,对于符合标准的编译器是强制性的——适用于所有 C 标准(或至少 C20)。

标签: cstandards

解决方案


C17(当前的 C 标准)将标准头文件列为:

<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 节“标准标题”的脚注中说明了这一点:

头文件 <complex.h>、<stdatomic.h> 和 <threads.h> 是实现不需要支持的条件特性;见 6.10.8.3

第 6.10.8.3 节(“条件功能宏”)反过来对这些标题有这样的说法:

__STDC_NO_ATOMICS__整数常量 1,意在表明实现不支持原子类型(包括 _Atomic 类型限定符)和<stdatomic.h>标头。

__STDC_NO_COMPLEX__整数常量 1,意在表明实现不支持复杂类型或<complex.h>标头。

__STDC_NO_THREADS__整数常量 1,意在表明实现不支持<threads.h>头文件。

最后,C17 谈到了“符合独立”的实现(第 4 节“一致性”):

符合标准的独立实现应接受任何严格符合标准的程序,其中库条款(第 7 条)中指定的功能的使用仅限于标准头文件<float.h><iso646.h><limits.h><stdalign.h><stdarg.h><stdbool.h><stddef.h>stdint.h><stdnoreturn.h>.


推荐阅读