web-dev-qa-db-fra.com

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 crée 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 suscité en moi la curiosité de connaître tous les fichiers d'en-tête et leur contribution.

Y a-t-il un endroit que je peux rechercher?

Je travaille sur Solaris Unix.

41
Vijay

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 la commande man (systèmes POSIX). Ou une autre source si vous utilisez un autre système d'exploitation.

18
Kornel Kisielewicz

L'en-tête 'tree.h' n'est standard nulle part.


Normes C

ISO/IEC 9899: 1990 (C89, C90)

Les 15 en-têtes standard 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/CEI 9899: 1990/AMD.1: 1995

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

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

ISO/CEI 9899: 1999 (C99)

Les 6 en-têtes supplémentaires dans 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 dans C2011 (pour un total de 29) sont:

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

ISO/IEC 9045: 2008 (POSIX 2008, spécification Unix unique)

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

<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 également que X/Open Curses nécessite un autre ensemble d'en-têtes. Il y avait une nouvelle version (Release 7) de cette spécification publiée en novembre 2009 (la première mise à jour depuis 1996 - les principales différences sont la perte du support officiel pour termcap et pré-standard C <varargs.h> entête).

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

Base de normes Linux

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


Normes C++

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

La norme répertorie 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 existe également 18 en-têtes correspondant aux 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) répertorie un en-tête obsolète, <strstream>, qui n'est pas mentionné plus haut dans la norme. Inclure 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 répertorié dans les autres versions de la norme.

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

Les 53 en-têtes C++ en C++ 11 sont:

<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 basée sur le projet de norme N3797 trouvée sur ISO/IEC JTC1/SC22/WG21 site. Les données proviennent des tableaux 14 et 15 de la section 17.6.1.2 En-têtes , modifiés comme indiqué ci-dessous. La norme n'ayant pas été publiée (au 21/09/2014), cette liste n'est pas encore définitive.

Les 54 en-têtes C++ en C++ 14 sont:

<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 existe un nouvel en-tête répertorié pour C++ 14 par rapport à C++ 11, à savoir <shared_mutex>.

NB: le projet répertorie 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 répertoriés dans les tableaux du projet, à savoir <exception>, <iterator>, <ratio>, <scoped_allocator>, et <thread>. Puisque le §18.8 définit <exception>, §24 définit <iterator>, Le §20.11 définit <ratio>, §30 définit <thread>, et le §30.4 définit <shared_mutex>, ceci est un exemple de la raison pour laquelle vous ne devriez pas faire confiance aux projets de normes comme étant le dernier mot - ils contiennent des erreurs.

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

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

Il existe 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 de C++ 17?

Notez que certains en-têtes de la "bibliothèque C" sont obsolètes en C++ 17, en particulier <ccomplex>, <cstdalign>, <cstdbool>, <ctgmath> (et pas <ciso646>). L'en-tête C++ <codecvt> (ajouté en C++ 11) est également déconseillé en C++ 17.


*  Les problèmes de "réduction d'un an" dans les dates sont dus au temps nécessaire pour traiter la norme après son approbation. L'ANSI a approuvé la norme C d'origine en 1989 ; L'ISO l'a approuvé en 1990. L'amendement 1 a été approuvé en 1994; il est sorti en 1995.

113
Jonathan Leffler

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

tree.h ne fait pas partie de la bibliothèque standard.

8
Adam Bowen

J'ai trouvé ceci entrée Wikipedia sur la bibliothèque standard C qui contient, des listes de fichiers d'en-tête C et des informations détaillées sur quelle norme ils fais partie de. Cela vous donne une belle perspective historique et quelques autres détails similaires.

Bien sûr, c'est juste C. Il y a un article similaire sous "Bibliothèque standard C++". Cela fait également référence à d'autres bibliothèques qui ne sont peut-être pas "standard" en soi mais sans lesquelles C++ se sentirait "paralysé" pour certaines personnes habituées à travailler avec les extensions.

6
Carl Smotricz