cpp | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Seules les options les plus utiles sont listées ici ; voyez plus bas pour les autres.
DESCRIPTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Le préprocesseur C n'est destiné à être utilisé que sur du code source C, C++ ou Objective C. Par le passé, il a été employé abusivement comme un processeur de texte général. Il se cassera les dents sur de l'entrée qui n'obéit pas aux règles lexicales du C. Par exemple, les apostrophes seront interprétées comme le début de constantes caractères, et provoqueront des erreurs. De plus, vous ne pouvez vous compter sur lui pour préserver les caractéristiques de l'entrée qui ne sont pas significatives dans la famille des langages C. Si un Makefile est prétraité, toutes les tabulations « dures » seront supprimées, et le Makefile ne fonctionnera pas.
Cela étant dit, vous pouvez souvent parvenir à utiliser cpp sur des choses qui ne sont pas du C. Les langages de programmation dérivés de l'Algol sont souvent sûrs (Pascal, Ada, etc.). L'assembleur l'est aussi, avec quelques précautions. Le mode -traditional préserve plus de caractères d'espacement, et est dans les autres cas plus permissif. Beaucoup de ces problèmes peuvent être évités en écrivant des commentaires de style C ou C++ au lieu des commentaires du langage natif, et en n'utilisant que des macros simples.
À chaque fois que c'est possible, vous devriez utiliser un préprocesseur adapté au langage dans lequel vous écrivez. Les versions modernes de l'assembleur GNU possèdent des outils de gestion des macros. La plupart des langages de programmation de haut niveau disposent de leurs propres mécanismes de compilation conditionnelle et d'inclusion. En dernier recours, essayez un processeur de texte réellement général, comme GNU M4.
Les préprocesseurs C se différencient en quelques détails. Ce manuel discute du préprocesseur C GNU, qui fournit un petit sur-ensemble des fonctionnalités du C Standard ISO. Dans son mode par défaut, le préprocesseur GNU C ne fait pas quelques actions requises par le standard. Ce sont des fonctionnalités qui sont rarement voire jamais utilisées, et qui peuvent entraîner des modifications surprenantes de la signification d'un programme qui ne s'y attend pas. Pour utiliser le C Standard ISO, vous devriez utiliser les options -std=c89 ou -std=c99, en fonction de la version du standard que vous voulez. Pour obtenir tous les diagnostics obligatoires, vous devez également utiliser -pedantic.
OPTIONS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
fichier-entrée ou fichier-sortie peut être -, ce qui pour fichier-entrée signifie de lire à partir de l'entrée standard, et pour fichier-sortie d'écrire sur la sortie standard. De plus, si l'un des fichiers est omis, cela signifie la même chose que si - avait été spécifié pour ce fichier.
À moins que cela ne soit mentionné différemment, ou que l'option se termine par =, toutes les options qui prennent un argument peuvent le voir apparaître immédiatement après l'option, ou avec une espace intermédiaire : -Ifoo et -I foo ont le même effet.
Beaucoup d'options ont un nom composé de plusieurs lettres ; de multiples options composées d'une seule lettre ne peuvent dès lors pas être regroupées : -dM est très différent de -d -M.
Si vous voulez définir une macro du type fonction sur la ligne de commandes, écrivez sa liste d'arguments avec les parenthèses entourantes avant le signe égal (s'il y en a un). Les parenthèses sont significatives dans la plupart des shells, et vous devrez donc protéger l'option. -D'nom(args...)=définition' fonctionne avec sh et csh.
Les options -D et -U sont traitées dans leur ordre d'apparition sur la ligne de commandes. Toutes les options -imacros fichier et -include fichier sont traitées après toutes les options -D et -U.
Les répertoires nommés avec -I sont parcourus avant les répertoires d'inclusion système standard.
Il est dangereux de spécifier un répertoire d'inclusion système standard dans une option -I. Cela fait échouer le traitement spécial des en-têtes système. Cela peut également faire échouer les réparations des en-têtes système bogués qu'effectue GCC lors de son installation.
À moins que cela ne soit spécifié explicitement (avec -MT ou -MQ), le nom du fichier objet est constitué du nom de base du fichier source où le suffixe éventuel est remplacé par le suffixe de fichier objet. S'il y a beaucoup de fichiers inclus, alors la règle est découpée en plusieurs lignes en utilisant \-newline. La règle n'a pas de commande.
Cette option ne supprime pas la sortie de débogage du préprocesseur, comme -dM. Pour éviter de mélanger une telle sortie de débogage avec les règles de dépendances, vous devriez spécifier explicitement le fichier de sortie des dépendances avec -MF, ou utiliser une variable d'environnement comme DEPENDENCIES_OUTPUT. La sortie de débogage sera toujours envoyée dans le flux de sortie normal comme de coutume.
Passer -M au pilote implique -E.
Cela implique que le choix de crochets pointus (< et >) ou de guillemets dans une directive #include ne détermine pas en lui-même si l'en-tête apparaîtra dans la sortie de dépendances de -MM. C'est un léger changement dans la sémantique depuis les versions 3.0 et antérieures de GCC.
Quand il est utilisé avec les options du pilote -MD ou -MMD, -MF surcharge le fichier de sortie des dépendances par défaut.
Cette fonctionnalité est utilisée lors de la mise à jour automatique de makefiles.
Voici une sortie typique :
test.o: test.c test.h
test.h:
Une option -MT définira la cible pour qu'elle soit exactement la chaîne de caractères que vous spécifiez. Si vous voulez plusieurs cibles, vous pouvez les spécifier comme un unique argument de -MT, ou utiliser plusieurs options -MT.
Par exemple, -MT '$(objpfx)foo.o' pourrait donner
$(objpfx)foo.o: foo.c
$$(objpfx)foo.o: foo.c
La cible par défaut est automatiquement protégée, comme si elle avait été fournie avec -MQ.
Si -MD est utilisé en conjonction avec -E, tout interrupteur -o est censé spécifier le fichier de sortie des dépendances (sauf @pxref{-MF}), mais s'il est utilisé sans -E, chaque -o est censé spécifier un fichier objet cible.
Puisque -E n'est pas impliqué, -MD peut être utilisé pour générer un fichier de sortie de dépendances comme effet de bord du processus de compilation.
Note : De précédentes versions de cpp acceptaient une option -lang qui sélectionnait à la fois le langage et le niveau de conformité aux standards. Cette option a été supprimée, car elle entre en conflit avec l'option -l.
Le standard peut être :
L'option -ansi est équivalente à -std=c89.
De plus, -I- empêche l'utilisation du répertoire courant (où est situé le fichier d'entrée actuel) comme premier répertoire de recherche pour « #include "fichier" ». -nostdinc
Si plusieurs options -include sont fournies, les fichiers sont inclus dans leur ordre d'apparition sur la ligne de commandes.
Tous les fichiers spécifiés par -imacros sont traités avant tous les fichiers spécifiés par -include.
L'utilisation de ces options est découragée.
-fpreprocessed est implicite si le fichier d'entrée possède l'une des extensions .i, .ii ou .mi. Ce sont les extensions que GCC utilise pour les fichiers prétraités créés par -save-temps.
touch foo.h; cpp -dM foo.h
affichera toutes les macros prédéfinies.
Vous devriez vous attendre à des effets de bord quand vous utilisez -C ; cette option force le préprocesseur à traiter les commentaires comme des éléments lexicaux à part entière. Par exemple, les commentaires apparaissant au début de ce qui serait une ligne de directive ont pour effet de transformer cette ligne en une ligne de code source ordinaire, puisque le premier élément lexical de la ligne n'est plus un #.
ENVIRONNEMENT | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Notez que vous pouvez également spécifier des endroits où chercher en utilisant des options comme -I, et contrôler la sortie des dépendances avec des options comme -M. Elles sont prioritaires sur les variables d'environnement, qui sont à leur tour prioritaires sur la configuration de GCC.
CPATH spécifie une liste de répertoires à parcourir comme s'ils avaient été spécifiés par -I, mais après tous les chemins fournis par des options -I sur la ligne de commandes. La variable d'environnement est utilisée quel que soit le langage en cours de prétraitement.
Les variables d'environnement restantes ne s'appliquent que lors du prétraitement du langage particulier indiqué. Chacune d'entre elles spécifie une liste de répertoires à parcourir comme s'ils avaient été spécifiés par -isystem, mais après tous les chemins fournis par des options -isystem sur la ligne de commandes.
Voyez aussi @ref{Search Path}.
La valeur de DEPENDENCIES_OUTPUT peut être simplement un nom de fichier, auquel cas les règles Make sont écrites dans ce fichier, en devinant le nom de la cible à partir du nom de fichier source, ou bien la valeur peut avoir la forme fichier cible, auquel cas les règles sont écrites dans le fichier en utilisant cible comme nom de cible.
En d'autres termes, cette variable d'environnement est équivalente à la combinaison des options -MM et -MF, complétée par un interrupteur -MT éventuel.
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
COPYRIGHT | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
L'autorisation est donnée de copier, de distribuer et/ou de modifier ce document sous les termes de la GNU Free Documentation License version 1.1 ou toute autre version ultérieure publiée par la Free Software Foundation. Une copie de la licence est incluse dans la page de manuel gfdl(7). Ce manuel ne contient aucune section invariante. Le texte de couverture est (a) (voir ci-dessous), et le texte de quatrième de couverture est (b) (voir ci-dessous).
(a) Le texte de couverture de la FSF est :
Un Manuel GNU
(b) Le texte de quatrième de couverture de la FSF est :
Vous êtes libre de copier et de modifier ce manuel GNU, tout comme les logiciels GNU. Les copies publiées par la Free Software Foundation collectent des fonds pour le développement de GNU.
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
Table des mots clés | Début | Suivant | Sommaire | Préc.page.lue | Accueil |