Le Préprocessor Macros de remplacement
Une macro de remplacement fait partie des directives du compilateur. Les directives du compilateur peuvent être utilisées pour modifier le code du fichier source avant qu'il ne soit syntaxiquement et sémantiquement analysé et converti. Parmi les directives du compilateur, on trouve entre autre l'inclusion de fichiers sources (IncludeFile, XIncludeFIle), l'inclusion conditionnelle (CompilerIf, CompilerSelect...), les fonctions du compilateur (SizeOf, OffsetOf), les commandes de débuggage (CallDebugger, Debug ...) mais surtout celles qui nous intéressent ici: les macros de remplacement (Macro, EndMacro). En définissant des macros de remplacement, plus couramment appelées macros, on peut effectuer des substitutions dans le fichier source. Macro simple Une instruction Macro se travaille presque comme une instruction Procedure, à ceci prêt qu'au moment de la compilation, le nom de la macro sera substitué par son contenu. Ex :
Lors de la compilation, ce code sera équivalent à,
Arguments de Macro Comme pour une procédure, les macros peuvent utiliser des paramètres formels entre parenthèses et séparés par des virgules. Quand la macro est invoquée, les véritables arguments remplacent les paramètres en leurs lieux et places dans le code de la macro. Ex :
Lors de la compilation, ce code donnera,
Mais à la différence des procédures, il n'est pas possible d'attribuer un type aux paramètres. Cela provoque une erreur de syntaxe que le compilateur ne manquera pas de vous signaler, mais cela à l'avantage de rendre une macro trés flexible. Aussi si l'on reprend le code précédent, on peut aussi l'appliquer directement à des chaines de caractères! Concaténation dans les Macro En fait, il faut comprendre et ne pas oublier que dans une macro, tout n'est que substitution: pour un paramètre --> sa valeur associée. A l'utilisateur de faire attention! Hors, cette substitution n'a lieu que si le compilateur trouve exactement le paramètre mots pour mots et isolé. Ex :
donnera literalement,
et non
car les mots Parametre1 et Parametre2 sont accolés et forment un seul mot. Afin de pouvoir obtenir le résultat souhaité, il est possible de réaliser des concaténations grâce à l'opérateur #, ce qui nous donne,
Cette fois, l'instruction Ma_Macro (10,5) sera bien substituée par Debug 105. Macro Imbriquées Les macros peuvent être imbriquées les unes dans les autres pour réaliser des substitutions élaborées Ex :
Lors de la compilation, ce code donnera,
Notez la précaution prise des parenthèses dans la macro Mon_Addition afin de maîtriser l'ordre des opérations du calcul final. Voir aussi POO: Les macros sont utilisées pour définir un jeu d'instructions complet pour la programmation POO.
|
Dräc - 2007 |