C和C++标准头文件列表

dddzy1tm  于 2023-03-20  发布在  其他
关注(0)|答案(4)|浏览(172)

在哪里可以找到C和C中所有头文件的列表?
当我构建一个库的时候,我得到了一个类似“tree.h not found”的错误。我想这是C和C
中的标准头文件。这引起了我想知道所有头文件及其贡献的好奇心。
有什么地方可以找吗?
我在Solaris Unix上工作。

velaa5lx

velaa5lx1#

标头“tree.h”在任何地方都不是标准的。

C标准

国际标准化组织/国际电工委员会9899:1990(C89、C90)
C89中的15个标准接头为:

<assert.h>  <limits.h>  <signal.h>  <stdlib.h>
<ctype.h>   <locale.h>  <stdarg.h>  <string.h>
<errno.h>   <math.h>    <stddef.h>  <time.h>
<float.h>   <setjmp.h>  <stdio.h>

国际标准化组织/国际电工委员会9899:1990/修正案1:1995
C94*(修订1)中引入的3个额外标题为:

<iso646.h>  <wchar.h>  <wctype.h>

国际标准化组织/国际电工委员会9899:1999(C99)
C99中的6个额外标头为:

<complex.h>  <inttypes.h>  <stdint.h>  <tgmath.h>
<fenv.h>     <stdbool.h>

国际标准化组织/国际电工委员会9899:2011(C11)
C2011中的5个额外标头(共29个)为:

<stdalign.h>  <stdatomic.h>  <stdnoreturn.h>  <threads.h>  <uchar.h>

国际标准化组织ISO/IEC 9899:2018(C17、C18)
无额外标头。
国际标准化组织ISO/IEC 9899:2023(C23)
C2023中的2个额外标头(共31个)为:

<stdbit.h>  <stdckdint.h>

有些标头已过时,特别是:

<stdalign.h>  <stdbool.h>  <stdnoreturn.h>

ISO/IEC 9045:2008(POSIX 2008,单一Unix规范)

注意POSIX需要更多的头文件(82个,包括所有的C99头文件)。下面的列表重复了标准的C(C99)头文件。当然,Windows需要一组不同的头文件。

<aio.h>        <libgen.h>       <spawn.h>         <sys/time.h>
<arpa/inet.h>  <limits.h>       <stdarg.h>        <sys/times.h>
<assert.h>     <locale.h>       <stdbool.h>       <sys/types.h>
<complex.h>    <math.h>         <stddef.h>        <sys/uio.h>
<cpio.h>       <monetary.h>     <stdint.h>        <sys/un.h>
<ctype.h>      <mqueue.h>       <stdio.h>         <sys/utsname.h>
<dirent.h>     <ndbm.h>         <stdlib.h>        <sys/wait.h>
<dlfcn.h>      <net/if.h>       <string.h>        <syslog.h>
<errno.h>      <netdb.h>        <strings.h>       <tar.h>
<fcntl.h>      <netinet/in.h>   <stropts.h>       <termios.h>
<fenv.h>       <netinet/tcp.h>  <sys/ipc.h>       <tgmath.h>
<float.h>      <nl_types.h>     <sys/mman.h>      <time.h>
<fmtmsg.h>     <poll.h>         <sys/msg.h>       <trace.h>
<fnmatch.h>    <pthread.h>      <sys/resource.h>  <ulimit.h>
<ftw.h>        <pwd.h>          <sys/select.h>    <unistd.h>
<glob.h>       <regex.h>        <sys/sem.h>       <utime.h>
<grp.h>        <sched.h>        <sys/shm.h>       <utmpx.h>
<iconv.h>      <search.h>       <sys/socket.h>    <wchar.h>
<inttypes.h>   <semaphore.h>    <sys/stat.h>      <wctype.h>
<iso646.h>     <setjmp.h>       <sys/statvfs.h>   <wordexp.h>
<langinfo.h>   <signal.h>

同样要注意的是,X/Open Curses需要另一组头文件,2009年11月发布了该规范的新版本(Release 7)(自1996年以来的第一次更新--主要区别在于不再支持termcap和标准前的C <varargs.h>头文件)。

<curses.h>  <term.h>  <uncntrl.h>

Linux标准库

你可能需要使用其他的头文件。例如,在这些列表中没有提到<getopt.h>,但是如果你使用GNU Getopt(例如,长选项),你将需要并使用该头文件。根据LSB, Linux Standards Base,它是Linux上的标准。LSB的旧版本被定义为ISO/IEC 23360:2006的多个部分;截至2014年9月21日,LSB的当前版本为4.1,但版本5.0仍在测试阶段。文档中有一节定义了包含哪些头文件,但在我查看的版本中没有方便的头文件表。它与POSIX非常一致,但具有超出POSIX定义的额外功能。

C++标准

国际标准化组织/国际电工委员会14882:1998(C98)
该标准列出了32个C
特有的头文件:

<algorithm>   <iomanip>   <list>     <ostream>    <streambuf>
<bitset>      <ios>       <locale>   <queue>      <string>
<complex>     <iosfwd>    <map>      <set>        <typeinfo>
<deque>       <iostream>  <memory>   <sstream>    <utility>
<exception>   <istream>   <new>      <stack>      <valarray>
<fstream>     <iterator>  <numeric>  <stdexcept>  <vector>
<functional>  <limits>

还有18个报头对应于来自C的报头(对应于C94):

<cassert>  <ciso646>  <csetjmp>  <cstdio>   <ctime>
<cctype>   <climits>  <csignal>  <cstdlib>  <cwchar>
<cerrno>   <clocale>  <cstdarg>  <cstring>  <cwctype>
<cfloat>   <cmath>    <cstddef>

有趣的是,附录D(§D.7)列出了一个废弃的头文件<strstream>,在标准前面没有提到,在GCC(g++)7.2.0中包含这个头文件会产生一个警告:

/opt/gcc/v7.2.0/include/c++/7.2.0/backward/backward_warning.h:32:2:
warning: #warning This file includes at least one deprecated or antiquated
header which may be removed without further notice at a future date.
Please use a non-deprecated interface with equivalent functionality
instead. For a listing of replacement headers and interfaces, consult
the file backward_warning.h. To disable this warning use -Wno-deprecated. [-Wcpp]

标头<strstream>在标准的其他版本中明确列出。
国际标准化组织ISO/IEC 14882:2011(C11)
C
11中的53个C++头文件是:

<algorithm>           <initializer_list>  <numeric>           <system_error>
<array>               <iomanip>           <ostream>           <thread>
<atomic>              <ios>               <queue>             <tuple>
<bitset>              <iosfwd>            <random>            <type_traits>
<chrono>              <iostream>          <ratio>             <typeindex>
<codecvt>             <istream>           <regex>             <typeinfo>
<complex>             <iterator>          <scoped_allocator>  <unordered_map>
<condition_variable>  <limits>            <set>               <unordered_set>
<deque>               <list>              <sstream>           <utility>
<exception>           <locale>            <stack>             <valarray>
<forward_list>        <map>               <stdexcept>         <vector>
<fstream>             <memory>            <streambuf>
<functional>          <mutex>             <string>
<future>              <new>               <strstream>

与C(C11)有关的26个标题是:

<cassert>   <cinttypes>  <csignal>    <cstdio>   <cwchar>
<ccomplex>  <ciso646>    <cstdalign>  <cstdlib>  <cwctype>
<cctype>    <climits>    <cstdarg>    <cstring>
<cerrno>    <clocale>    <cstdbool>   <ctgmath>
<cfenv>     <cmath>      <cstddef>    <ctime>
<cfloat>    <csetjmp>    <cstdint>    <cuchar>

国际标准化组织ISO/IEC 14882:2014(C++14)

  • 基于ISO/IEC JTC1/SC22/WG21网站上的标准草案N3797的标题暂定列表。数据来自17.6.1.2标题部分的表14和15,修订如下。由于标准尚未发布(截至2014年9月21日),因此该列表尚未确定。*

C14中的54个C头文件是:

<algorithm>           <initializer_list>  <numeric>           <strstream>
<array>               <iomanip>           <ostream>           <system_error>
<atomic>              <ios>               <queue>             <thread>
<bitset>              <iosfwd>            <random>            <tuple>
<chrono>              <iostream>          <ratio>             <type_traits>
<codecvt>             <istream>           <regex>             <typeindex>
<complex>             <iterator>          <scoped_allocator>  <typeinfo>
<condition_variable>  <limits>            <set>               <unordered_map>
<deque>               <list>              <shared_mutex>      <unordered_set>
<exception>           <locale>            <sstream>           <utility>
<forward_list>        <map>               <stack>             <valarray>
<fstream>             <memory>            <stdexcept>         <vector>
<functional>          <mutex>             <streambuf>
<future>              <new>               <string>

与C(C11)相关的26个头文件与C++11相比没有变化:

<cassert>   <cinttypes>  <csignal>    <cstdio>   <cwchar>
<ccomplex>  <ciso646>    <cstdalign>  <cstdlib>  <cwctype>
<cctype>    <climits>    <cstdarg>    <cstring>
<cerrno>    <clocale>    <cstdbool>   <ctgmath>
<cfenv>     <cmath>      <cstddef>    <ctime>
<cfloat>    <csetjmp>    <cstdint>    <cuchar>

与C11相比,C14列出了一个新的标头,即<shared_mutex>

  • 注:草案列出了一些标题(<deque><istream><stdexcept><unordered_set>)两次。另外,草案中的表中没有列出来自C++11的5个头文件,即<exception><iterator><ratio><scoped_allocator><thread>。由于§18.8定义了<exception>,§24定义了<iterator>,§20.11定义了<ratio>,§30定义了<thread>,§30.4定义了<shared_mutex>,这是一个例子,说明了为什么你不应该相信标准草案是最终的决定--它们包含错误。

国际标准化组织ISO/IEC 14882:2017(C++17)

  • 基于2017年3月21日N4659草案的C++17中标题的临时列表。这是来自www.example.com标题部分的表16和17的转录20.5.1.2。这不是最终标准;从理论上讲,有些事情是可以改变。

有61个C++头文件:

<algorithm>           <future>            <numeric>           <strstream>
<any>                 <initializer_list>  <optional>          <system_error>
<array>               <iomanip>           <ostream>           <thread>
<atomic>              <ios>               <queue>             <tuple>
<bitset>              <iosfwd>            <random>            <type_traits>
<chrono>              <iostream>          <ratio>             <typeindex>
<codecvt>             <istream>           <regex>             <typeinfo>
<complex>             <iterator>          <scoped_allocator>  <unordered_map>
<condition_variable>  <limits>            <set>               <unordered_set>
<deque>               <list>              <shared_mutex>      <utility>
<exception>           <locale>            <sstream>           <valarray>
<execution>           <map>               <stack>             <variant>
<filesystem>          <memory>            <stdexcept>         <vector>
<forward_list>        <memory_resource>   <streambuf>
<fstream>             <mutex>             <string>
<functional>          <new>               <string_view>

与C14相比,新的头文件似乎是:一米20英寸一英寸、一米21英寸一英寸、一米22英寸一英寸、一米23英寸一英寸、一米24英寸一英寸、一米25英寸一英寸、一米26英寸一英寸。
同样,与C(C11)相关的26个头文件与C
11和C++14相比没有变化:

<cassert>   <cinttypes>  <csignal>    <cstdio>   <cwchar>
<ccomplex>  <ciso646>    <cstdalign>  <cstdlib>  <cwctype>
<cctype>    <climits>    <cstdarg>    <cstring>
<cerrno>    <clocale>    <cstdbool>   <ctgmath>
<cfenv>     <cmath>      <cstddef>    <ctime>
<cfloat>    <csetjmp>    <cstdint>    <cuchar>

另请参见What are the new features in C++17?
注意一些“C library”头文件在C17中是deprecated,特别是<ccomplex><cstdalign><cstdbool><ctgmath>(而不是<ciso646>)。C头文件<codecvt>(在C11中添加的)在C17中也被弃用。

**日期中的“相差一年”问题是由于标准被批准后处理标准所花费的时间。ANSI在1989中批准了原始的C标准;ISO于1990年批准,修正案1于1994年批准;它于1995年发行。

kqhtkvqz

kqhtkvqz2#

请尝试:http://en.cppreference.com/w/
然而,你也可以引用你的操作系统的头文件,这些可以在MSDN(Windows)或man命令(POSIX系统)中找到,或者如果你在另一个操作系统上,也可以从另一个源文件中找到。

camsedfj

camsedfj3#

http://www.cplusplus.com/reference/列出了所有标准C头文件和C头文件的C Package 器。
tree.h不是标准库的一部分。

t3psigkw

t3psigkw4#

我找到了这个Wikipedia entry on the C standard library,它包含了C头文件的列表和关于它们是哪个标准的详细信息,这给了你一个很好的历史视角和一些其他类似的细节。
当然,这只是C。在“C标准库”下有一篇类似的文章。它还引用了一些其他库,这些库本身可能不是“标准”的,但如果没有这些库,一些习惯于使用扩展的人会觉得C“残废”。

相关问题