Maison >développement back-end >C++ >Comment l'ordre d'expansion des macros affecte-t-il la stringification en C et C ?
Dans le domaine du C et du C, le terme « stringification » fait référence à la conversion d'un argument de macro en une chaîne littérale . Cependant, le processus peut être complexe, comme le démontre le scénario suivant :
#define foo 4 #define str(s) #s
Dans ce cas, str(foo) renvoie "foo" car le processus de stringification (l'opérateur #) est exécuté avant la macro. expansion (la directive #define). Cela garantit que foo reste un nom de macro et n'est pas remplacé par sa valeur.
Cependant, l'extrait de code suivant produit un résultat différent :
#define xstr(s) str(s) #define str(s) #s #define foo 4
Avec xstr(foo) appelé, le la sortie devient "4". Pour comprendre ce comportement, nous devons nous plonger dans les subtilités de l'expansion des macros.
Selon les normes C et C, le processus d'expansion des macros comprend les étapes suivantes :
Dans le cas de xstr(foo) :
La principale différence ici réside dans l'étape où les arguments macro sont substitués (étape 2). Avec str(foo) dans le premier exemple, l'étape 2 se produit après que la stringification a été appliquée à l'étape 1. Par conséquent, foo n'est pas remplacé et la sortie reste "foo".
Pour résoudre ce problème, le La macro d'assistance xstr est utilisée. En imbriquant des macros, nous pouvons d'abord effectuer la substitution d'argument à l'étape 2, puis appliquer la stringification à l'étape 1, en garantissant l'obtention du résultat souhaité de « 4 ».
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!