CPP32.EXE, le préprocesseur du compilateur C
Remonter à Utilitaires en ligne de commande - Index
CPP32.EXE produit un fichier de listage d'un programme C ou C++, dans lequel tous les #define de macros et tous les #include de fichiers ont été développés. Bien qu'il ne soit pas nécessaire d'utiliser le préprocesseur pour une compilation normale, ce fichier de listage peut être utile à des fins de débogage.
Souvent, lorsque le compilateur signale une erreur dans une macro ou un fichier d'inclusion, vous pouvez obtenir davantage d'informations sur la nature de l'erreur en consultant les fichiers d'inclusion ou les résultats du développement des macros. Avec un grand nombre de compilateurs à plusieurs passes, ce travail est effectué par une passe séparée dont on peut examiner les résultats. Puisque le compilateur C++Builder est un compilateur à une seule passe, utilisez CPP32 pour obtenir les résultats procurés par la première passe d'autres compilateurs.
Pour chaque fichier traité par CPP32, la sortie est écrite dans un fichier du répertoire en cours (ou du répertoire de sortie désigné à l'aide de l'option -n) portant le nom du fichier source mais avec l'extension .I.
Ce fichier de sortie est un fichier texte contenant chaque ligne du fichier source et tous les fichiers d'inclusion. Les lignes contenant des directives de prétraitement ont été retirées, de même que les lignes de texte conditionnel exclues de la compilation. Si vous n'avez pas utilisé d'option de ligne de commande pour définir une autre spécification, les lignes de texte sont préfixées par le nom de fichier et le numéro de ligne du fichier source ou du fichier d'inclusion dont elles proviennent. Dans chaque ligne de texte, les macros sont remplacées par leur texte développé. Utilisez l'option -Sr pour produire un fichier sans numéros de ligne. Vous pouvez alors passer ce fichier au compilateur (utilisez l'option -P du compilateur pour imposer une compilation C++).
Sommaire |
Syntaxe de la ligne de commande
CPP32 [<options>] <nomfichier[s]>
Pour afficher l'aide de la ligne de commande, entrez :
cpp32 -h
CPP32 reconnaît les mêmes options que BCC32, à l'exception des ajouts suivants pour l'option -S (contrôle du format de sortie prétraité) :
| Option | Description |
|---|---|
-Sc |
Conserve les commentaires dans le fichier prétraité. |
-Sd |
Conserve les définitions dans le fichier prétraité. |
-Sk |
Conserve les sorties en cas d'erreur. |
-Sr |
Rend les sorties lisibles en préservant les commentaires et les indentations. |
-Ss |
Affiche les statistiques sur les noms de fichiers et les compteurs de lignes. |
CPP32 en tant que préprocesseur de macros
CPP32 peut être utilisé comme un préprocesseur de macros ; le fichier .i résultant peut alors être compilé avec BCC32. Le programme simple suivant illustre le prétraitement d'un fichier par CPP32.
Fichier source : HELLOFB.C
#define NAME “Frank Embarcadero”
#define BEGIN {
#define END }
main()
BEGIN
printf(“%s\n”, NAME);p
END
Ligne de commande CPP32
CPP32 HELLOFB.C
Sortie (écrite dans HELLOFB.I)
/* HELLOFP.C 1: */
/* HELLOFP.C 2: */
/* HELLOFP.C 3: */
/* HELLOFP.C 4: */
/* HELLOFP.C 5: */main()
/* HELLOFP.C 6: */printf("%s\n", "Frank Embarcadero");
/* HELLOFP.C 7: */}
/* HELLOFP.C 8: */}
Utilisation de MIDL avec CPP32
MIDL (Microsoft Interface Definition Language, langage de définition d'interface Microsoft) est un compilateur RPC. Afin d'utiliser MIDL avec le préprocesseur C++ (CPP32.EXE), servez-vous de la commande MIDL suivante :
| Option | Description |
|---|---|
-<cpp_cmd> {<CPP32>}
|
Indique à MIDL le préprocesseur à utiliser lors du traitement d'un fichier .IDL ou .ACF. MIDL appelle le préprocesseur pour développer les macros dans les fichiers source. |
-<cpp_opt> "{<options>}"
|
Spécifie les options de ligne de commande pour le préprocesseur. L'option -Sr retire les informations nom de fichier et numéro de ligne dans chaque ligne de la sortie prétraitée. L'option -oCON indique que la sortie prétraitée doit être acheminée vers la sortie standard, au lieu d'être enregistrée dans un fichier. La bannière du préprocesseur et le fichier en cours de traitement ne sont pas transmis. L'inclusion de -oCON dans un fichier .CFG traité par le préprocesseur provoque la transmission de la bannière. |
{<options CPP32>}
|
Transmet les options à CPP32. |
{<options MIDL>}
|
Toutes les options de ligne de commande MIDL. |
{<fichier .idl/.acf>
|
Le fichier source traité par MIDL. |
BCC32, CPP32 et UUIDs
Dans certains cas, CPP32 n'accepte pas des UUIDs valides. Une instruction UUID valide est, par exemple, de la forme :
uuid(5630EAA0-CA48-1067-B320-00DD010662DB)
Quand CPP32 rencontre 5630EAA0, il le considère comme un nombre à virgule flottante, et comme il ne s'agit pas d'un nombre à virgule flottante valide, le préprocesseur émet une erreur. Pour contourner ce problème, encadrez l'UUID par des guillemets. Lors de l'emploi de MIDL avec CPP32, utilisez l'option -ms_ext. L'instruction UUID devient :
uuid("5630EAA0-CA48-1067-B320-00DD010662DB")
et la ligne de commande MIDL devient :
MIDL -ms_ext -cpp_cmd CPP32 -cpp_opt " -oCON {<options CPP32>}" {<options MIDL>} {<fichier .idl/.acf>}