Maison >développement back-end >C++ >Pourquoi `xstr(foo)` génère-t-il « 4 » alors que `str(foo)` génère « foo » dans une extension de macro de type C ?
Comprendre la stringification : les étapes clés de l'expansion des macros
Le concept de stringification dans les langages de type C vous permet de convertir des expressions en chaînes. Comprendre les étapes impliquées dans ce processus est crucial pour une utilisation efficace des macros.
Le problème : la différence de sortie
Considérez la définition de macro suivante :
#define foo 4 #define str(s) #s
Lorsque vous utilisez str(foo) dans votre code, il affichera "foo" car la stringification (étape 1) est effectuée avant l'expansion du texte (étape 2).
Cependant, si vous définissez une macro supplémentaire :
#define xstr(s) str(s)
Et utilisez xstr(foo), le résultat sera étonnamment "4". Cette différence nécessite une exploration du processus de stringification.
Étapes de l'expansion de macro
Le processus d'expansion de macro comporte plusieurs étapes, selon les normes C et C :
Application des étapes à xstr(foo)
Pourquoi str(foo) génère "foo"
Contrairement à xstr(foo), str(foo) renvoie "foo" car :
Par conséquent, l'utilisation d'une macro d'assistance comme xstr garantit que l'expansion du texte (étape 2) est effectuée avant la stringification (étape 1), permettant des conversions de chaînes correctes.
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!