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.
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.
L'en-tête 'tree.h' n'est standard nulle part.
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>
Les 3 en-têtes supplémentaires introduits dans C94* (Amendement 1) sont:
<iso646.h> <wchar.h> <wctype.h>
Les 6 en-têtes supplémentaires dans C99 sont:
<complex.h> <inttypes.h> <stdint.h> <tgmath.h>
<fenv.h> <stdbool.h>
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>
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>
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.
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.
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>
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.
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.
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.
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.