Source file inclusion
Inclut un autre fichier source dans le fichier source actuel à la ligne immédiatement après la directive.
Table des matières |
Syntaxe
#include <
séquence-de-caractères-h
>
nouvelle-ligne
|
(1) | ||||||||
#include "
séquence-de-caractères-q
"
nouvelle-ligne
|
(2) | ||||||||
#include
jetons-pp
nouvelle-ligne
|
(3) | ||||||||
__has_include
(
"
séquence-de-caractères-q
"
)
__has_include
(
<
séquence-de-caractères-h
>
)
|
(4) | (depuis C23) | |||||||
__has_include
(
littéral-de-chaîne
)
__has_include
(
<
jetons-pp-h
>
)
|
(5) | (depuis C23) | |||||||
| new-line | - | Le caractère de nouvelle ligne |
| h-char-sequence | - |
Une séquence d'un ou plusieurs
h-char
s, où l'apparition de l'un des éléments suivants provoque un comportement indéfini :
|
| h-char | - | Tout membre du jeu de caractères source sauf le caractère de nouvelle ligne et > |
| q-char-sequence | - |
Une séquence d'un ou plusieurs
q-char
s, où l'apparition de l'un des éléments suivants provoque un comportement indéfini :
|
| q-char | - | Tout membre du jeu de caractères source sauf le caractère de nouvelle ligne et " |
| pp-tokens | - | Une séquence d'un ou plusieurs jetons de prétraitement |
| string-literal | - | Un littéral de chaîne |
| h-pp-tokens | - | Une séquence d'un ou plusieurs jetons de prétraitement sauf > |
Explication
include
dans la directive sont traités comme dans le texte normal (c'est-à-dire que chaque identifiant actuellement défini comme nom de macro est remplacé par sa liste de remplacement de jetons de prétraitement). La directive résultant après tous les remplacements doit correspondre à l'une des deux formes précédentes. La méthode par laquelle une séquence de jetons de prétraitement entre
<
et
>
ou une paire de caractères
"
est combinée en un seul jeton de prétraitement de nom d'en-tête est définie par l'implémentation.
__has_include
prend la valeur
1
si la recherche du fichier source réussit, et la valeur
0
si la recherche échoue.
Dans le cas où le fichier n'est pas trouvé, le programme est mal formé.
|
|
(depuis C23) |
Notes
Les implémentations typiques ne recherchent que les répertoires d'inclusion standard pour la syntaxe (1). La bibliothèque standard C est implicitement incluse dans ces répertoires d'inclusion standard. Les répertoires d'inclusion standard peuvent généralement être contrôlés par l'utilisateur via les options du compilateur.
L'intention de la syntaxe (2) est de rechercher les fichiers qui ne sont pas contrôlés par l'implémentation. Les implémentations typiques recherchent d'abord le répertoire où réside le fichier courant puis reviennent à (1) .
Lorsqu'un fichier est inclus, il est traité par les
phases de traduction
1-4, ce qui peut inclure, de manière récursive, l'expansion des directives
#include
imbriquées, jusqu'à une limite d'imbrication définie par l'implémentation. Pour éviter l'inclusion répétée du même fichier et la récursion infinie lorsqu'un fichier s'inclut lui-même, éventuellement de manière transitive, les
gardes d'en-tête
sont couramment utilisées : l'intégralité de l'en-tête est encapsulée dans
#ifndef FOO_H_INCLUDED /* tout nom mappé de manière unique au nom de fichier */ #define FOO_H_INCLUDED // le contenu du fichier se trouve ici #endif
De nombreux compilateurs implémentent également le non-standard pragma #pragma once avec des effets similaires : il désactive le traitement d'un fichier si le même fichier (où l'identité du fichier est déterminée de manière spécifique au système d'exploitation) a déjà été inclus.
Un résultat
__has_include
de
1
signifie uniquement qu'un en-tête ou fichier source avec le nom spécifié existe. Cela ne signifie pas que l'en-tête ou le fichier source, lorsqu'il est inclus, ne provoquerait pas d'erreur ou contiendrait quelque chose d'utile.
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 6.4.7 Noms d'en-tête (p: 69)
-
- 6.10.1 Inclusion conditionnelle (p: 165-169)
-
- 6.10.2 Inclusion de fichiers source (p: 169-170)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 6.10.2 Inclusion de fichiers source (p: 119-120)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 6.10.2 Inclusion de fichiers source (p: 164-166)
- Norme C99 (ISO/IEC 9899:1999) :
-
- 6.10.2 Inclusion de fichiers source (p: 149-151)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 3.8.2 Inclusion de fichier source
Voir aussi
| Une liste des fichiers d'en-tête de la bibliothèque standard C | |
|
Documentation C++
pour
Inclusion de fichiers source
|