在哪里可以找到C和C ++中所有头文件的列表?
在构建库时,我收到的错误如“tree.h not found
”。
我想这是C和C ++中的标准头文件。这让我了解了所有头文件及其贡献的好奇心。
我有搜索的地方吗?
我正在使用Solaris Unix。
答案 0 :(得分:113)
标题'tree.h'在任何地方都不是标准的。
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>
C94 * (修订1)中引入的3个额外标题是:
<iso646.h> <wchar.h> <wctype.h>
C99中的6个额外标题是:
<complex.h> <inttypes.h> <stdint.h> <tgmath.h>
<fenv.h> <stdbool.h>
C2011中的5个额外标题(总共29个)是:
<stdalign.h> <stdatomic.h> <stdnoreturn.h> <threads.h> <uchar.h>
请注意,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月发布了该规范的新版本(第7版)(自1996年以来的第一次更新 - 主要区别在于对termcap和标准前C <varargs.h>
标题的官方支持的丢失)。
<curses.h> <term.h> <uncntrl.h>
您可能需要使用其他标头。例如,这些列表中没有提到<getopt.h>
,但如果您使用的是GNU Getopt(例如,对于长选项),则需要使用该标头。根据{{3}},它是Linux的标准配置。较旧版本的LSB被定义为ISO / IEC 23360:2006的多个部分;截至2014-09-21,LSB的当前版本为4.1,但5.0版本处于测试阶段。该文档的一部分定义了包含哪些标题,但在我看到的版本中没有方便的标题表。它与POSIX紧密结合,但具有超出POSIX定义的额外设施。
标准列出了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>
明确列在标准的其他版本中。
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>
基于LSB, Linux Standards Base网站上的草案标准N3797的临时标题列表。数据来自第17.6.1.2节标题中的表14和表15,如下所述进行了修改。由于该标准尚未发布(截至2014-09-21),此列表尚未确定。
C ++ 14中的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>
与C ++ 11相比,C ++ 14列出了一个新标题,即<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>
,这是一个为什么你不应该相信标准草案作为最后一个词的例子 - 它们包含错误。
基于2017年3月21日的草案ISO/IEC JTC1/SC22/WG21,C ++ 17中的标题临时列表。这是第20.5.1.2节标题中表16和17的转录。这不是最终标准;从理论上讲,有些东西可能会改变。
有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>
与C ++ 14相比,新标题似乎是:<any>
,<execution>
,<filesystem>
,<memory_resource>
,<optional>
,{{1} },<string_view>
。
同样,与C ++(C11)相关的26个标题与C ++ 11和C ++ 14相比没有变化:
<variant>
另见N4659
请注意,C ++ 17中的某些“C库”标题为What are the new features in C++17?,具体为<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>
,<ccomplex>
,<cstdalign>
,<cstdbool>
(而不是<ctgmath>
)。在C ++ 17中也不推荐使用C ++标头<ciso646>
(在C ++ 11中添加)。
* 日期中“关闭一年”问题是由于批准后处理标准所需的时间。 ANSI批准deprecated中的原始C标准; ISO于1990年批准。修正案1于1994年获得批准;它于1995年发布。
答案 1 :(得分:18)
在此尝试:http://en.cppreference.com/w/
但是,您可能还在引用操作系统的头文件。这些可以在MSDN(Windows)或man
命令(POSIX系统)上找到。或者如果您使用的是其他操作系统,则为其他来源。
答案 2 :(得分:8)
http://www.cplusplus.com/reference/列出了所有标准C ++头文件和C头文件的C ++包装器。
tree.h不是标准库的一部分。
答案 3 :(得分:6)
我发现这个Wikipedia entry on the C standard library包含了C头文件的列表以及的哪些标准的详细信息。这为您提供了一个很好的历史视角和其他类似的细节。
当然那只是C.在“C ++标准库”下可以找到类似的文章。这也引用了其他一些可能不是“标准”本身的库,但如果没有这些库,C ++会觉得某些人习惯使用这些扩展程序“瘫痪”。