Liste des fichiers d'en-tête standard en C et c++

Où puis-je trouver la liste de tous les fichiers d'en-tête en C et C++?

pendant que je construis une bibliothèque, j'obtiens une erreur comme tree.h not found ". Je suppose que c'est un fichier d'en-tête standard en C et C++. Cela a soulevé en moi la curiosité de connaître tous les fichiers d'en-tête et leur contribution.

Est-il un endroit où je peux chercher?

je travaille sur Solaris Unix.

40
demandé sur Jonathan Leffler 2010-01-08 16:57:47

4 réponses

Essayez ici: http://en.cppreference.com/w /

cependant, vous pouvez également vous référer aux fichiers d'en-tête de votre système D'exploitation. Ceux-ci peuvent être trouvés sur MSDN (Windows) ou par man commande (systèmes POSIX). Ou une autre source si vous êtes sur un autre OS.

18
répondu Kornel Kisielewicz 2013-08-28 09:02:28

L'en-tête 'de l'arbre.h' n'est standard nulle part.


Normes C

ISO/CEI 9899:1990 (C89, C90)

les 15 en-têtes standards en C89 sont:

<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

les 3 en-têtes supplémentaires introduits en C94 * (Amendement 1) sont:

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

ISO / CEI 9899: 1999 (C99)

les 6 en-têtes supplémentaires en C99 sont:

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

ISO / CEI 9899: 2011 (C11)

les 5 en-têtes supplémentaires en C2011 (pour un total de 29) sont:

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

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

Note que POSIX exige beaucoup plus d'en-têtes (82, y compris tous les C99 en-têtes). La liste ci-dessous reprend les en-têtes standard C (C99). Windows nécessite un ensemble différent de headers, bien sûr.

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

Notez aussi que X/malédictions Ouvertes nécessite un autre jeu de en-têtes. Il y avait une nouvelle version (Version 7) de cette spécification publiée en novembre 2009 (la première mise à jour depuis 1996 - les principales différences sont la perte de support officiel pour termcap et pré-standard c <varargs.h> en-tête).

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

Linux Base De Normes

Il y a d'autres têtes que vous pourriez avoir besoin d'utiliser. Par exemple, il n'y a aucune mention de <getopt.h> dans ces listes, mais si vous utilisez GNU Getopt (pour les options longues, par exemple), vous aurez besoin et utiliserez cet en-tête. Il est standard sur Linux selon le LSB, Linux Standards Base . Une ancienne version de la LSB a été définie comme ISO/IEC 23360:2006 en plusieurs parties; en date du 2014-09-21, la version actuelle de la LSB est 4.1 mais la version 5.0 est en version bêta. Il y a une section du document qui définit quels en-têtes sont inclus, mais il n'y a pas de tableau pratique des en-têtes dans la version que j'ai regardé. Il est étroitement aligné avec POSIX, mais dispose d'installations supplémentaires au-delà de ce que POSIX définit.


Normes C++

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

le standard liste 32 en-têtes spécifiques à 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>

il y a aussi 18 en-têtes correspondant à des en-têtes de C (correspondant à C94):

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

curieusement, L'Annexe D (§D. 7) énumère un en-tête déprécié, <strstream> , qui n'est pas mentionné plus tôt dans la norme. Incluant cet en-tête avec GCC ( g++ ) 7.2.0 génère un avertissement:

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

L'en-tête <strstream> est explicitement listé dans les autres versions de la norme.

ISO / CEI 14882: 2011 (C++11)

53 C++ en-têtes en 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>

les 26 en-têtes liés à C (C11) sont:

<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 / CEI 14882: 2014 (C++14)

liste provisoire des en-têtes fondée sur le projet de norme N3797 trouvé sur le site ISO/CEI JTC1/SC22/WG21 . Les données proviennent des tableaux 14 et 15 de la section 17.6.1.2 en-têtes , modifié comme indiqué ci-dessous. Puisque la norme n'a pas été publié (2014-09-21), cette liste n'est pas encore définitif.

54 C++ en-têtes en 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>

les 26 en-têtes liés à C (C11) sont inchangés par rapport à 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>

il y a un nouvel en-tête listé pour C++14 comparé à C++11, à savoir <shared_mutex> .

NB: le projet énumère un certain nombre d'en-têtes ( <deque> , <istream> , <stdexcept> , <unordered_set> ) deux fois. En outre, 5 en-têtes de C++11 ne sont pas énumérés dans les tableaux du projet, à savoir <exception> , <iterator> , <ratio> , <scoped_allocator> , et <thread> . Comme l'article 18.8 définit <exception> , l'article 24 définit <iterator> , l'article 20.11 définit <ratio> , l'article 30 définit <thread> , et l'article 30.4 définit <shared_mutex> , c'est un exemple de la raison pour laquelle vous ne devriez pas faire confiance au projet les normes en tant que mot de la fin - elles contiennent des erreurs.

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

liste provisoire des en-têtes en C++17 basée sur le projet N4659 daté 2017-03-21. Il s'agit d'une transcription des tableaux 16 et 17 de la section 20.5.1.2 Headers . Ce n'est pas la norme finale; en théorie, quelque chose pourrait changer.

Il y a 61 en-têtes 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>

les nouveaux en-têtes par rapport à C++14 semblent être: <any> , <execution> , <filesystem> , <memory_resource> , <optional> , <string_view> , <variant> .

encore une fois, les 26 en-têtes liés à C (C11) sont inchangés par rapport à C++11 et 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>

Voir aussi quelles sont les nouvelles fonctionnalités en C++17?

Note que certains des en-têtes de la "bibliothèque C" sont déprécié en C++17, spécifiquement <ccomplex> , <cstdalign> , <cstdbool> , <ctgmath> (et non <ciso646> ). L'en-tête c++ <codecvt> (ajouté en C++11) est également déprécié en C++17.


* les problèmes liés au délai de mise en oeuvre de la norme après son approbation sont attribuables au temps qu'il faut pour la mettre en oeuvre. ANSI approuvé la norme C originale en 1989 ; approuvé par L'ISO en 1990. L'Amendement 1 a été approuvé en 1994; il a été publié en 1995.

110
répondu Jonathan Leffler 2017-09-28 05:44:09

http://www.cplusplus.com/reference / liste tous les en-têtes C++ standard et les en-têtes C++ des fichiers d'en-tête C.

de l'arbre.h ne fait pas partie de la bibliothèque standard.

8
répondu Adam Bowen 2010-01-08 14:00:33

j'ai trouvé cette entrée Wikipedia sur la bibliothèque C standard qui contient, des listes de fichiers d'en-tête C et des informations détaillées sur dont standard font partie. Cela vous donne une belle perspective historique et d'autres détails similaires.

bien sûr, c'est seulement le C. Il y a un article similaire qui se trouve sous "C++ standard library". Il y a aussi des références à d'autres bibliothèques qui peuvent ne pas être "standard"" en soi, mais sans quoi C++ se sentirait "estropié" pour certaines personnes habituées à travailler avec les extensions.

6
répondu Carl Smotricz 2010-01-08 14:25:45