D'apres le man de cpp sous Panther:
cpp [-Dmacro[=defn]...] [-Umacro]
[-Idir...] [-Wwarn...]
[-M|-MM] [-MG] [-MF filename]
[-MP] [-MQ target...] [-MT target...]
[-x language] [-std=standard]
infile outfile
mais /usr/bin/cpp est un script qui contient:
--------DEBUT
PATH=/usr/bin:/bin
CPP="/usr/libexec/gcc/darwin//usr/bin/arch/default/cpp"
ALST="-traditional -D__GNUC__"
NSI=no
OPTS=""
INCS=""
FOUNDFILES=no
while [ $# -gt 0 ]
do
A="$1"
shift
case $A in
-nostdinc)
NSI=yes
;;
-traditional)
;;
-I*)
INCS="$INCS $A"
;;
-U__GNUC__)
ALST=cho $ALST | sed -e 's/-D__GNUC__//'
;;
-imacros|-include|-idirafter|-iprefix|-iwithprefix)
INCS="$INCS '$A' '$1'"
shift
;;
-*)
OPTS="$OPTS '$A'"
;;
*)
FOUNDFILES=yes
if [ $NSI = "no" ]
then
NSI=skip
fi
eval $CPP $ALST $INCS $OPTS $A || exit $?
;;
esac
done
if [ $FOUNDFILES = "no" ]
then
# read standard input
if [ $NSI = "no" ]
then
INCS="$INCS -I/usr/include"
fi
eval exec $CPP $ALST $INCS $OPTS
fi
exit 0
-----------FIN
Ce qui veux dire que je fait
cpp in.c out.i
la ligne
eval $CPP $ALST $INCS $OPTS $A || exit $?
sera executee deux fois et la sortie se fera sur la sortie standard au lieu
d'etre dant out.i comme semble le dire le man.
Je pense que cette ligne doit etre remplacee par:
eval $CPP $ALST $INCS $OPTS $A $@ && exit $?
Qu'en pense-vous?
--
Saïd.
C programmers never die - they're just cast into void.
Je pense que cette ligne doit etre remplacee par: eval $CPP $ALST $INCS $OPTS $A $@ && exit $?
pourquoi le && à la place du || ?
le || me semble très bien.
Si eval $CPP ... réussi, l'évaluation paresseuse fait que exit est appelé avec la dernière de valeur de retour.
je verrai donc plus quelque chose du genre :
eval $CPP $ALST $INCS $OPTS $A "$1" || exit $?
-- DINH V. Hoa,
"Le monde n'attend que toi ! " -- FiLH
Saïd
DINH Viêt Hoà :
Je pense que cette ligne doit etre remplacee par: eval $CPP $ALST $INCS $OPTS $A $@ && exit $?
pourquoi le && à la place du || ?
le || me semble très bien.
Si eval $CPP ... réussi, l'évaluation paresseuse fait que exit est appelé avec la dernière de valeur de retour.
Ben non justement. Si le eval se passe bien le exit n'est pas lance. Par contre ma solution est mauvaise dans le cas ou le eval se passe mal. (|| signifie "ou" et donc si sont premier argument est vrai (ca se passe bien) alors il n'y a pas besoin d'evaluer le reste).
Mais le plus important c'est le decalage entre ce que dit le man et ce qui se passe avec ce scipt.
-- Saïd. C programmers never die - they're just cast into void.
DINH Viêt Hoà :
Je pense que cette ligne doit etre remplacee par:
eval $CPP $ALST $INCS $OPTS $A $@ && exit $?
pourquoi le && à la place du || ?
le || me semble très bien.
Si eval $CPP ... réussi, l'évaluation paresseuse fait que exit est
appelé avec la dernière de valeur de retour.
Ben non justement. Si le eval se passe bien le exit n'est pas lance. Par
contre ma solution est mauvaise dans le cas ou le eval se passe mal. (||
signifie "ou" et donc si sont premier argument est vrai (ca se passe bien)
alors il n'y a pas besoin d'evaluer le reste).
Mais le plus important c'est le decalage entre ce que dit le man et ce qui
se passe avec ce scipt.
--
Saïd.
C programmers never die - they're just cast into void.
Je pense que cette ligne doit etre remplacee par: eval $CPP $ALST $INCS $OPTS $A $@ && exit $?
pourquoi le && à la place du || ?
le || me semble très bien.
Si eval $CPP ... réussi, l'évaluation paresseuse fait que exit est appelé avec la dernière de valeur de retour.
Ben non justement. Si le eval se passe bien le exit n'est pas lance. Par contre ma solution est mauvaise dans le cas ou le eval se passe mal. (|| signifie "ou" et donc si sont premier argument est vrai (ca se passe bien) alors il n'y a pas besoin d'evaluer le reste).
Mais le plus important c'est le decalage entre ce que dit le man et ce qui se passe avec ce scipt.
-- Saïd. C programmers never die - they're just cast into void.
DINH Viêt Hoà
DINH Viêt Hoà :
Je pense que cette ligne doit etre remplacee par: eval $CPP $ALST $INCS $OPTS $A $@ && exit $?
pourquoi le && à la place du || ?
le || me semble très bien.
Si eval $CPP ... réussi, l'évaluation paresseuse fait que exit est appelé avec la dernière de valeur de retour.
Ben non justement. Si le eval se passe bien le exit n'est pas lance. Par contre ma solution est mauvaise dans le cas ou le eval se passe mal. (|| signifie "ou" et donc si sont premier argument est vrai (ca se passe bien) alors il n'y a pas besoin d'evaluer le reste).
oui, effectivement, je devais avoir bu quand j'ai écrit ça. je pense qu'il faut ne pas évaluer le reste dans tous les cas.
un exec eval $CPP ... irait donc bien.
-- DINH V. Hoa,
"Le monde n'attend que toi ! " -- FiLH
DINH Viêt Hoà :
Je pense que cette ligne doit etre remplacee par:
eval $CPP $ALST $INCS $OPTS $A $@ && exit $?
pourquoi le && à la place du || ?
le || me semble très bien.
Si eval $CPP ... réussi, l'évaluation paresseuse fait que exit est
appelé avec la dernière de valeur de retour.
Ben non justement. Si le eval se passe bien le exit n'est pas lance. Par
contre ma solution est mauvaise dans le cas ou le eval se passe mal. (||
signifie "ou" et donc si sont premier argument est vrai (ca se passe bien)
alors il n'y a pas besoin d'evaluer le reste).
oui, effectivement, je devais avoir bu quand j'ai écrit ça.
je pense qu'il faut ne pas évaluer le reste dans tous les cas.
Je pense que cette ligne doit etre remplacee par: eval $CPP $ALST $INCS $OPTS $A $@ && exit $?
pourquoi le && à la place du || ?
le || me semble très bien.
Si eval $CPP ... réussi, l'évaluation paresseuse fait que exit est appelé avec la dernière de valeur de retour.
Ben non justement. Si le eval se passe bien le exit n'est pas lance. Par contre ma solution est mauvaise dans le cas ou le eval se passe mal. (|| signifie "ou" et donc si sont premier argument est vrai (ca se passe bien) alors il n'y a pas besoin d'evaluer le reste).
oui, effectivement, je devais avoir bu quand j'ai écrit ça. je pense qu'il faut ne pas évaluer le reste dans tous les cas.
un exec eval $CPP ... irait donc bien.
-- DINH V. Hoa,
"Le monde n'attend que toi ! " -- FiLH
Laurent Wacrenier
Saïd écrit:
mais /usr/bin/cpp est un script qui contient:
Ouch. Utilise "gcc -E", appeler cpp directement est un exercice délicat sur certains systèmes.
Saïd <said@brian.lan> écrit:
mais /usr/bin/cpp est un script qui contient:
Ouch. Utilise "gcc -E", appeler cpp directement est un exercice
délicat sur certains systèmes.