Programmer en langage C
208
© Éditions Eyrolles
que vous le souhaitez puisque c’est la fin de ligne qui termine la directive. Il est même possible
de le prolonger au-delà, en terminant la ligne par \ et en poursuivant sur la ligne suivante.
Vous voyez que, compte tenu des possibilités d’imbrication des substitutions, cette instruction
s’avère très puissante au point qu’elle pourrait permettre à celui qui le souhaiterait de réécrire
totalement le langage C (on pourrait, par exemple, le franciser). Cette puissance a toutefois ses
propres limites dans la mesure où tout abus dans ce sens conduit inexorablement à une perte
de lisibilité des programmes.
Si vous introduisez, par mégarde, un signe = dans une directive #define, aucune erreur ne
sera, bien sûr, détectée par le préprocesseur lui-même. Par contre, en général, cela conduira
à une erreur de compilation. Ainsi, par exemple, avec :
#define N = 5
une instruction telle que :
int t[N] ;
deviendra, après traitement par le préprocesseur :
int t[= 5] ;
laquelle est manifestement erronée. Notez bien, toutefois, que, la plupart du temps, vous ne
connaîtrez pas le texte généré par le préprocesseur et vous serez simplement en présence
d’un diagnostic de compilation concernant apparemment l’instruction int t[N]. Le diagnostic
de l’erreur en sera d’autant plus délicat.
Une autre erreur aussi courante que la précédente consiste à terminer (à tort) une directive
#include par un point-virgule. Les considérations précédentes restent valables dans ce cas.
Certaines implémentations permettent d’avoir connaissance du texte généré par le préprocesseur, c’est-à-dire, du texte qui sera véritablement compilé ; cette facilité peut rendre plus aisé
le diagnostic d’erreurs telles que celles que nous venons d’envisager.
2.2 Définition de macros
La définition de macros ressemble à la définition de symboles mais elle fait intervenir la
notion de paramètres.
Par exemple, avec cette directive :
#define carre(a) a*a
le préprocesseur remplacera dans la suite tous les textes de la forme :
carre(x)
Delannoy Livre.book Page 208 Mercredi, 6. mai 2009 4:26 16
Précédent

- 221/281

Suivant