Dévoilement de la magie de la stringification
Dans le domaine de la programmation, la stringification se présente comme une technique polyvalente qui permet aux macros de générer dynamiquement des chaînes basées sur leurs arguments. La clé pour comprendre comment ce processus se déroule est l'ordre méticuleux dans lequel l'expansion de la macro se produit.
Considérez la définition de macro suivante :
#define foo 4 #define str(s) #s
Lorsque str(foo) est évalué, il en résulte le expansion de #s en "foo" car l'opération stringify (#) a priorité sur l'expansion textuelle. Cependant, lorsque vous introduisez des couches supplémentaires d'indirection de macro, l'ordre des opérations devient crucial.
Le cas de xstr(foo)
Définir la ou les macros xstr(foo) as :
#define xstr(s) str(s) #define str(s) #s #define foo 4
L'application de cette macro à xstr(foo) produit un résultat inattendu : "4". La clé pour percer ce mystère réside dans les étapes suivantes de l'expansion des macros :
Lorsque xstr(foo) est traité :
Puisque #4 est une chaîne littérale, il se résout en "4". Par conséquent, xstr(foo) est évalué à "4" plutôt qu'à "foo" car l'opération de stringification prend effet après l'expansion textuelle.
Une leçon sur l'ordre des macros
Ceci Ce résultat apparemment contre-intuitif met en évidence l’importance de l’ordre macro. Pour éviter de telles ambiguïtés, il est souvent recommandé d'utiliser une macro d'assistance pour exécuter une étape avant d'appliquer l'opération stringify. Cela garantit le résultat souhaité en définissant clairement l'ordre des opérations.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!