© Éditions Eyrolles
209
chapitre n° 12
Le préprocesseur
dans lesquels x représente en fait un symbole quelconque par :
x*x
Par exemple :
carre(z)
deviendra
z*z
carre(valeur)
deviendra
valeur*valeur
carre(12)
deviendra
12*12
La macro précédente ne disposait que d’un seul paramètre, mais il est possible d’en faire intervenir plusieurs en les séparant, classiquement, par des virgules. Par exemple, avec :
#define dif(a,b) a-b
dif(x,z)
deviendrait
x-z
dif(valeur+9,n) deviendrait
valeur+9-n
Là encore, les définitions peuvent s’imbriquer. Ainsi, avec les deux définitions précédentes, le
texte :
dif(carre(p),carre(q))
sera, dans un premier temps, remplacé par :
dif(p*p,q*q)
puis, dans un second temps, par :
p*p-q*q
Néanmoins, malgré la puissance de cette directive, il ne faut pas oublier que, dans tous les cas,
il ne s’agit que de substitution de texte. Il est souvent nécessaire de prendre quelques précautions, notamment lorsque le texte de substitution fait intervenir des opérateurs. Par exemple,
avec ces instructions :
#define DOUBLE(x) x + x
.....
DOUBLE(a)/b
DOUBLE(x+2*y)
DOUBLE(x++)
Le texte généré par le préprocesseur sera le suivant :
a + a/b
x+2*y + x+2*y
x++ + x++
Delannoy Livre.book Page 209 Mercredi, 6. mai 2009 4:26 16
209
chapitre n° 12
Le préprocesseur
dans lesquels x représente en fait un symbole quelconque par :
x*x
Par exemple :
carre(z)
deviendra
z*z
carre(valeur)
deviendra
valeur*valeur
carre(12)
deviendra
12*12
La macro précédente ne disposait que d’un seul paramètre, mais il est possible d’en faire intervenir plusieurs en les séparant, classiquement, par des virgules. Par exemple, avec :
#define dif(a,b) a-b
dif(x,z)
deviendrait
x-z
dif(valeur+9,n) deviendrait
valeur+9-n
Là encore, les définitions peuvent s’imbriquer. Ainsi, avec les deux définitions précédentes, le
texte :
dif(carre(p),carre(q))
sera, dans un premier temps, remplacé par :
dif(p*p,q*q)
puis, dans un second temps, par :
p*p-q*q
Néanmoins, malgré la puissance de cette directive, il ne faut pas oublier que, dans tous les cas,
il ne s’agit que de substitution de texte. Il est souvent nécessaire de prendre quelques précautions, notamment lorsque le texte de substitution fait intervenir des opérateurs. Par exemple,
avec ces instructions :
#define DOUBLE(x) x + x
.....
DOUBLE(a)/b
DOUBLE(x+2*y)
DOUBLE(x++)
Le texte généré par le préprocesseur sera le suivant :
a + a/b
x+2*y + x+2*y
x++ + x++
Delannoy Livre.book Page 209 Mercredi, 6. mai 2009 4:26 16
