Список стандартных заголовочных файлов в C и C ++ - PullRequest
41 голосов
/ 08 января 2010

Где я могу найти список всех файлов заголовков в C и C ++?

Когда я собираю библиотеку, я получаю сообщение об ошибке типа 'tree.h not found'. Я предполагаю, что это стандартный заголовочный файл на C и C ++. Это вызвало во мне любопытство знать все заголовочные файлы и их вклад.

Есть ли место, где я могу искать?

Я работаю над Solaris Unix.

Ответы [ 4 ]

113 голосов
/ 08 января 2010

Заголовок tree.h нигде не является стандартным.


C Стандарты

ИСО / МЭК 9899: 1990 (С89, С90)

15 стандартных заголовков в C89:

<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

3 дополнительных заголовка, представленных в C94 * (Поправка 1):

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

ИСО / МЭК 9899: 1999 (С99)

6 дополнительных заголовков в C99:

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

ИСО / МЭК 9899: 2011 (С11)

5 дополнительных заголовков в C2011 (всего 29):

<stdalign.h>  <stdatomic.h>  <stdnoreturn.h>  <threads.h>  <uchar.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 г. была выпущена новая версия этой версии (выпуск 7) (первое обновление с 1996 г. - основные отличия - потеря официальной поддержки termcap и предстандартного заголовка C <varargs.h>).

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

База стандартов Linux

Существуют и другие заголовки, которые вам может понадобиться. Например, в этих списках нет упоминания <getopt.h>, но если вы используете GNU Getopt (например, для длинных опций), вам понадобится и используйте этот заголовок. Это стандарт для Linux в соответствии с LSB, База стандартов Linux . Старая версия LSB была определена как ISO / IEC 23360: 2006 из нескольких частей; по состоянию на 2014-09-21 текущая версия LSB - 4.1, но версия 5.0 находится в бета-версии. Есть раздел документа, который определяет, какие заголовки включены, но в той версии, на которую я смотрел, нет удобной таблицы заголовков. Он тесно связан с POSIX, но имеет дополнительные возможности помимо того, что определяет POSIX.


Стандарты C ++

ИСО / МЭК 14882: 1998 (С ++ 98)

Стандарт перечисляет 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> явно указан в других версиях стандарта.

ИСО / МЭК 14882: 2011 (С ++ 11)

53 заголовка C ++ в C ++ 11:

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

26 заголовков, связанных с C (C11):

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

ИСО / МЭК 14882: 2014 (С ++ 14)

Предварительный список заголовков на основе проекта стандарта N3797, найденный на сайте ISO / IEC JTC1 / SC22 / WG21 . Данные взяты из таблиц 14 и 15 в разделе 17.6.1.2 Заголовки с поправками, указанными ниже. Поскольку стандарт не был опубликован (по состоянию на 2014-09-21), этот список еще не является окончательным.

54 заголовка C ++ в C ++ 14:

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

26 заголовков, связанных с C (C11), не изменились по сравнению с 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 ++ 14 по сравнению с C ++ 11, а именно <shared_mutex>.

Примечание: в черновике указано количество заголовков (<deque>, <istream>, <stdexcept>, <unordered_set>) дважды. Кроме того, 5 заголовков из C ++ 11 не перечислены в таблицах проекта, а именно <exception>, <iterator>, <ratio>, <scoped_allocator> и <thread>. Поскольку §18.8 определяет <exception>, §24 определяет <iterator>, §20.11 определяет <ratio>, §30 определяет <thread>, а §30.4 определяет <shared_mutex>, это пример того, почему вы не должны доверять проектам стандартов как последнее слово - они содержат ошибки.

ИСО / МЭК 14882: 2017 (C ++ 17)

Предварительный список заголовков в C ++ 17 на основе черновика N4659 от 2017-03-21. Это транскрипция таблиц 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>

Новые заголовки по сравнению с C ++ 14 выглядят так: <any>, <execution>, <filesystem>, <memory_resource>, <optional>, <string_view>, <variant>.

Опять же, 26 заголовков, связанных с C (C11), не изменились по сравнению с 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?

Обратите внимание, что некоторые заголовки библиотеки C * устарели в C ++ 17, в частности <ccomplex>, <cstdalign>, <cstdbool>, <ctgmath> (а не <ciso646>) , Заголовок C ++ <codecvt> (добавлен в C ++ 11) также не рекомендуется в C ++ 17.


* Проблемы с датами «на один год» обусловлены временем, которое требуется для обработки стандарта после его утверждения. ANSI утвердил первоначальный стандарт С в 1989 ; ИСО утвердила его в 1990 году. Поправка 1 была утверждена в 1994 году; выпущен в 1995 году.

18 голосов
/ 08 января 2010

Попробуйте здесь: http://en.cppreference.com/w/

Однако вы также можете обращаться к заголовочным файлам вашей ОС. Их можно найти либо в MSDN (Windows), либо по команде man (системы POSIX). Или другой источник, если вы работаете в другой ОС.

8 голосов
/ 08 января 2010

http://www.cplusplus.com/reference/ перечисляет все стандартные заголовки C ++ и оболочки C ++ заголовочных файлов C.

tree.h не является частью стандартной библиотеки.

6 голосов
/ 08 января 2010

Я нашел эту запись в Википедии в стандартной библиотеке C , которая содержит списки заголовочных файлов C и подробную информацию о , в стандарт которого они входят. Это дает вам хорошую историческую перспективу и некоторые другие подобные детали.

Конечно, это просто C. Аналогичная статья находится в разделе "Стандартная библиотека C ++". Здесь также есть ссылки на некоторые другие библиотеки, которые сами по себе могут не быть «стандартными», но без которых C ++ чувствовал бы себя «неполноценным» для некоторых людей, привыкших работать с расширениями.

...