Une macro est un morceau de code avec un nom (les noms de macros m4 distinguent les majuscules/minuscules), des paramètres facultatifs, et une chaîne de texte associée qui constitue la définition de la macro. L’exemple suivant définit la macro SqlSaveState, qui n’a pas de paramètres, et une définition d’instruction d’assignation
Définitions et expansions de macros
SPL :
define(SqlSaveState, Set PrvStmtSqlState = SqlState)
Quand m4 rencontre la ligne d’entrée
SqlSaveState;
il remplace le nom de la macro par le texte de la définition pour produire la ligne de sortie
Set PrvStmtSqlState = SqlState;
On voit tout de suite que les macros simples offrent un « raccourci » pour des fragments de code fréquemment utilisés. Le texte de définition d’une macro peut être constitué de plusieurs lignes de code et il peut inclure d’autres macros, que nous verrons plus loin.
Les paramètres de macros permettent de réutiliser des morceaux de code qui varient légèrement selon l’usage. La macro suivante a un paramètre qui fournit le nom d’une variable SPL à tester :
define(SqlStateIsOk, ($1 = ‘00000’))
Quand m4 rencontre la ligne d’entrée
Is SqlStateIsOk(PrvStmtSqlState) Then
il remplace le nom de la macro et son argument par un texte étendu pour produire la ligne de sortie
If (PrvStmtState = ‘00000’) Then
Les macros de m4 peuvent avoir jusqu’à neuf paramètres, référencés dans le texte de remplacement de $1 à $9. m4 possède également plusieurs structures de genre paramètre intégrées, y compris $#, qui est remplacé par le nombre d’arguments fournis sur l’appel de macro. Vous pouvez traiter les paramètres facultatifs en testant $#.
Le texte de remplacement d’une macro peut contenir d’autres macros définies par l’utilisateur, intégrées, ce qui accroît grandement la puissance de m4, au prix, il est vrai, d’un peu plus de complexité.
La figure 1A montre les définitions de deux macros (les <<…>> sont des délimiteurs guillemets) : SqlApp Signal, qui s’étend en deux instructions SPL (Set et Signal) et SqlStd WarningWrapup, qui s’étend en une clause SPL When qui exécute conditionnellement le code défini dans la macro SqlAppSignal. Quand m4 rencontre l’entrée de la figure 1B, il produit la sortie de la figure 1C. Les appels de macros ne sont pas la même chose que les appels de procédures à l’exécution.
Lorsqu’il scrute le flux d’entrée, m4 recherche constamment des chaînes correspondant au nom d’une macro (ou de quelque structure intégrée). Dès que m4 rencontre une macro, il remplace le nom de celle-ci et toute éventuelle liste d’arguments par le texte de définition de la macro, allant jusqu’à remplacer les éventuelles références de paramètres $n par les chaînes correspondantes fournies comme arguments sur l’appel de macro. Lorsqu’il collecte les arguments d’une macro, m4 examine les chaînes d’arguments sans guillemets pour voir si elles contiennent des macros et, s’il en rencontre, il les étend immédiatement. Après il rescrute l’appel de macro.
Si d’autres macros sont rencontrées alors, le cycle se répète. Quand l’appel de macro ne contient plus de macros non étendues, la macro originale est étendue conformément à son texte de définition. Pour des macros simples, le résultat de leur imbrication est simple et direct. Mais sachez que certains résultats pourront sembler surprenants quand vous commencerez à travailler avec du traitement conditionnel, des chaînes entre guillemets et autres fonctions m4 (voir l’encadré « Les mystères des macros »).
Téléchargez cette ressource
Microsoft 365 Tenant Resilience
Face aux failles de résilience des tenants M365 (configurations, privilèges, sauvegarde). Découvrez 5 piliers pour durcir, segmenter et surveiller vos environnements afin de limiter l’impact des attaques. Prioriser vos chantiers cyber et améliorer la résilience de vos tenants Microsoft 365.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Communication d’entreprise à l’ère de l’IA : fragmentation, Shadow AI et perte de contrôle
- Pourquoi les outils de sécurité ne suffisent plus face aux angles morts de la détection
- Rhea1 : SiPearl allume le CPU européen le plus ambitieux pour le HPC et l’IA souveraine
- L’analytique prédictive au service de la décarbonation en France
Articles les + lus
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
Rhea1 : SiPearl allume le CPU européen le plus ambitieux pour le HPC et l’IA souveraine
Analyse Patch Tuesday Mai 2026
Les coûts cachés des merge requests générées par l’IA
Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
À la une de la chaîne Tech
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
- Rhea1 : SiPearl allume le CPU européen le plus ambitieux pour le HPC et l’IA souveraine
- Analyse Patch Tuesday Mai 2026
- Les coûts cachés des merge requests générées par l’IA
- Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
