OVH Cloud OVH Cloud

Listing préprocesseur

3 réponses
Avatar
Pierre Maurette
Bonjour,
Existe-t-il une méthode pour exclure de la sortie préprocessseur
sélectivement certains #include ?
Il s'agit bien entendu des fichiers de bibliothèque standard, dans
l'hypothèse où ils ne posent pas problème eux-mêmes.
Pas moyen de trouver le truc. Même une #pragma conviendrait (Borland,
Visual, GNU) ...
Ce que je peux faire, puisqu'il s'agit de générer ce fichier pour
consultation, c'est juste de commenter ces include le temps de la sortie
précompilateur.
Merci

fu2: comp.lang.c
--
Pierre

3 réponses

Avatar
Marc Boyer
Pierre Maurette wrote:
Bonjour,
Existe-t-il une méthode pour exclure de la sortie préprocessseur
sélectivement certains #include ?
Il s'agit bien entendu des fichiers de bibliothèque standard, dans
l'hypothèse où ils ne posent pas problème eux-mêmes.
Pas moyen de trouver le truc. Même une #pragma conviendrait (Borland,
Visual, GNU) ...


Les fichier d'en-tête sont généralement protégés contre
la double inclusion par un #ifndef _FICHIER_H.

Tu peux définir ces macros sur la ligne de commande.
Avec mon gcc:
% gcc -E -D_STDIO_H toto.c
n'incluera pas stdio.h (enfin, ça l'inclut, mais ça le
voit vide).

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Pierre Maurette
"Marc Boyer" a écrit ...
Pierre Maurette wrote:
Bonjour,
Existe-t-il une méthode pour exclure de la sortie préprocessseur
sélectivement certains #include ?
Il s'agit bien entendu des fichiers de bibliothèque standard, dans
l'hypothèse où ils ne posent pas problème eux-mêmes.
Pas moyen de trouver le truc. Même une #pragma conviendrait (Borland,
Visual, GNU) ...


Les fichier d'en-tête sont généralement protégés contre
la double inclusion par un #ifndef _FICHIER_H.

Tu peux définir ces macros sur la ligne de commande.
Avec mon gcc:
% gcc -E -D_STDIO_H toto.c
n'incluera pas stdio.h (enfin, ça l'inclut, mais ça le
voit vide).
Je te remercie.

J'avais dans la même optique envisagé une macro genre NO_LIST_H ou PRE_PRO,
mais ça rajoute encore des conditionnels dans le source, autant faire comme
tu proposes, ou alors commenter en bloc les include standard (la zone avant
le #pragma hdrstop, par exemple).
Ça fait partie des solutions qui conduisent à ne pas inclure, en ce sens que
les macros de stdio.h ne seront pas définies. C'est peut-être dangereux, si
le but est de vérifier le développement de macros par exemple.
Bon, d'un autre coté, avec un éditeur correct, ce n'est pas difficile de
naviguer dans le fichier complet.
Je voulais surtout savoir si j'avais bien lu les docs.
C'est marrant, les possibilités du vieux MASM (ou TASM) quant aux listings
sont bien supérieures à celle de C. Bon, il faut dire que 99% de la valeur
ajoutée est dans le préprocesseur, et que des sorties passe 1 seront très
souvent utiles, ce qui n'est pas le cas en C.
Pierre


Avatar
Marc Boyer
Pierre Maurette wrote:
"Marc Boyer" a écrit ...
Pierre Maurette wrote:
Bonjour,
Existe-t-il une méthode pour exclure de la sortie préprocessseur
sélectivement certains #include ?
Il s'agit bien entendu des fichiers de bibliothèque standard, dans
l'hypothèse où ils ne posent pas problème eux-mêmes.
Pas moyen de trouver le truc. Même une #pragma conviendrait (Borland,
Visual, GNU) ...


Les fichier d'en-tête sont généralement protégés contre
la double inclusion par un #ifndef _FICHIER_H.

Tu peux définir ces macros sur la ligne de commande.
Avec mon gcc:
% gcc -E -D_STDIO_H toto.c
n'incluera pas stdio.h (enfin, ça l'inclut, mais ça le
voit vide).
Je te remercie.

J'avais dans la même optique envisagé une macro genre NO_LIST_H ou PRE_PRO,
mais ça rajoute encore des conditionnels dans le source, autant faire comme
tu proposes, ou alors commenter en bloc les include standard (la zone avant
le #pragma hdrstop, par exemple).


Je me méfie des solutions de debug qui viennent modifier
le code. Si on peut faire autrement, je trouve ça mieux.

Ça fait partie des solutions qui conduisent à ne pas inclure, en ce sens que
les macros de stdio.h ne seront pas définies. C'est peut-être dangereux, si
le but est de vérifier le développement de macros par exemple.
Bon, d'un autre coté, avec un éditeur correct, ce n'est pas difficile de
naviguer dans le fichier complet.


Vouis, ou un petit coup de sed/awk/perl peut faire l'affaire.

Je voulais surtout savoir si j'avais bien lu les docs.


J'ai pas trouvé mieux en tout cas.

C'est marrant, les possibilités du vieux MASM (ou TASM) quant aux listings
sont bien supérieures à celle de C. Bon, il faut dire que 99% de la valeur
ajoutée est dans le préprocesseur, et que des sorties passe 1 seront très
souvent utiles, ce qui n'est pas le cas en C.


On pourrait dire que le préprocesseur, c'est ce qu'il y a de pire
dans le C ;-)

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(