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

我在哪里可以findC和C ++中所有头文件的列表?

当我build立一个图书馆,我得到一个错误,如“ tree.h not found ”。 我想这是C和C ++中的标准头文件。 这引起了我对所有头文件及其贡献的好奇心。

有没有可以search的地方?

我正在Solaris Unix上工作。

试试这里: http : //en.cppreference.com/w/

但是,您也可能会引用您的操作系统的头文件。 这些可以在MSDN(Windows)或man命令(POSIX系统)上find。 或者另一个来源,如果你在另一个操作系统。

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


C标准

ISO / IEC 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> 

ISO / IEC 9899:1990 / Amd.1:1995

C94 * (修正1)引入的3个额外标题是:

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

ISO / IEC 9899:1999(C99)

C99中的6个额外的头文件是:

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

ISO / IEC 9899:2011(C11)

C2011中的5个额外的标题(共29个)是:

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

ISO / IEC 9045:2008(POSIX 2008,Single Unix Specification)

请注意, 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和pre-standard C <varargs.h>头文件)。

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

Linux标准库

还有其他的标题,你可能需要使用。 例如,在这些列表中没有提及<getopt.h> ,但是如果您使用的是GNU Getopt(例如对于长选项),则需要使用该标题。 根据LSB,Linux标准库,它是Linux上的标准 。 旧版本的LSB在多个部分被定义为ISO / IEC 23360:2006; 截至2014年9月21日,LSB的当前版本是4.1,但5.0版本正在testing中。 文档的一部分定义了哪些头文件包含在内,但在我看的版本中没有方便的头文件表。 它与POSIX紧密结合,但是具有超出POSIX定义的额外function。


C ++标准

ISO / IEC 14882:1998(C ++ 98)

标准列出了特定于C ++的32个头文件:

 <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(C ++ 11)

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日),这个名单尚未确定。

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> )的<stdexcept> 此外,草稿中的表格(即<exception><iterator><ratio><scoped_allocator><thread>中没有列出5个来自C ++ 11的头文件。 由于§18.8定义了<exception> ,§24定义了<iterator> ,§20.11定义了<ratio> ,§30定义了<thread> ,§30.4定义了<shared_mutex> ,这就是为什么你不应该相信草案标准作为最后一个字 – 它们包含错误。

ISO / IEC 14882:2017(C ++ 17)

基于N4659草案date2017-03-21的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><string_view><variant>

与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> 

另请参见C ++ 17中的新function是什么?

请注意,某些“C库”标头在C ++ 17中已弃用 ,特别是<ccomplex><cstdalign><cstdbool><ctgmath> (而不是<ciso646> )。 C ++头文件<codecvt> (在C ++ 11中添加)也在C ++ 17中被弃用。


*date中 的“closures一年”问题是由于批准后处理标准所需的时间。 1989年 ANSI批准了原始C标准; 国际标准化组织于1990年批准。1994年批准了修正案1; 它于1995年发布。

http://www.cplusplus.com/reference/列出了C头文件的所有标准C ++头文件和C ++包装文件。

tree.h不是标准库的一部分。

我在C标准库中find了这个维基百科条目,其中包含C头文件列表以及它们属于哪个标准的详细信息。 这给你一个很好的历史观点和一些其他类似的细节。

当然这只是C.在“C ++标准库”下面还有类似的文章。 这也涉及到一些其他的图书馆本身可能不是“标准”的,但没有这些图书馆会觉得一些人习惯于使用扩展。