Utilisation des en-têtes de bibliothèque C++

Vous incluez le contenu d’un en-tête standard en le nommant dans une directive Include.

#include <iostream>// include I/O facilities

Vous pouvez inclure les en-têtes standard dans n’importe quel ordre, un en-tête standard plusieurs fois ou plusieurs en-têtes standard qui définissent une même macro ou un même type. N’incluez pas d’en-tête standard dans une déclaration. Ne définissez pas les macros qui ont les mêmes noms que les mot clé avant d’inclure un en-tête standard.

Un en-tête de bibliothèque C++ inclut tous les autres en-têtes de bibliothèque C++ dont il a besoin pour définir les types nécessaires. (Incluez toujours explicitement tous les en-têtes de bibliothèque C++ nécessaires dans une unité de traduction, mais vous pensez que vous avez tort sur ses dépendances réelles.) Un en-tête C standard n’inclut jamais un autre en-tête standard. Un en-tête standard déclare ou définit uniquement les entités décrites pour lui dans ce document.

Chaque fonction de la bibliothèque est déclarée dans un en-tête standard. Contrairement au langage C standard, l’en-tête standard ne fournit jamais de macro de masquage du même nom que la fonction qui masque la déclaration de fonction et permet d’obtenir le même effet. Pour plus d’informations sur les macros de masquage, consultez Conventions de la bibliothèque C++.

Tous les noms autres que operator delete et operator new dans les en-têtes de bibliothèque C++ sont définis dans l’espace de noms std, ou dans un espace de noms imbriqué dans l’espace de noms std. Vous faites référence au nom cin, par exemple, en tant que std::cin. Notez toutefois que les noms de macros ne sont pas soumis à la qualification de l’espace de noms. Vous écrivez __STD_COMPLEX donc toujours sans qualificateur d’espace de noms.

Dans certains environnements de traduction, l’insertion d’un en-tête de bibliothèque C++ peut hausser les noms externes déclarés dans l’espace de noms std vers l’espace de noms global, avec des déclarations using individuelles pour chacun de ces noms. Sinon, l’en-tête n’introduit aucun nom de bibliothèque dans l’espace de noms actuel.

Le standard C++ nécessite que les en-têtes du standard C déclarent tous les noms externes dans l’espace de noms std, puis les haussent vers l’espace de noms global avec des déclarations using individuelles pour chacun de ces noms. Mais, dans certains environnements de traduction, les en-têtes du standard C n’incluent aucune déclaration d’espace de noms, déclarant tous les noms directement dans l’espace de noms global. Par conséquent, la façon la plus portable de traiter les espaces de noms consiste à suivre deux règles :

  • Pour déclarer assurément dans l’espace de noms std un nom externe qui est traditionnellement déclaré dans <stdlib.h>, par exemple, inclure l’en-tête <cstdlib>. Sachez que le nom peut également être déclaré dans l’espace de noms global.

  • Pour déclarer assurément dans l’espace de noms global un nom externe déclaré dans <stdlib.h>, incluez directement l’en-tête <stdlib.h> . Sachez que le nom peut également être déclaré dans l’espace de noms std.

Par conséquent, si vous souhaitez appeler std::abort pour provoquer un arrêt anormal, vous devez inclure <cstdlib>. Si vous souhaitez appeler abort, vous devez inclure <stdlib.h>.

Vous pouvez également écrire la déclaration :

using namespace std;

qui rassemble tous les noms de bibliothèque dans l’espace de noms actuel. Si vous écrivez cette déclaration immédiatement après toutes les directives Include, vous haussez les noms dans l’espace de noms global. Vous pouvez ignorer par la suite les considérations d’espace de noms dans le reste de l’unité de traduction. Vous évitez également la plupart des différences entre les différents environnements de traduction.

Sauf indication contraire spécifique, vous ne pouvez pas définir les noms dans l’espace de noms std ni dans un espace de noms imbriqué dans l’espace de noms std, dans votre programme.

Voir aussi

Vue d’ensemble de la bibliothèque standard C++
Sécurité des threads dans la bibliothèque C++ Standard