Je veux savoir la raison derrière la sortie de ce code. Je ne pouvais pas venir avec une réponse.
#define f(a,b) a##b #define g(a) #a #define h(a) g(a) void main() { printf("%s %s",h(f(1,2)),g(f(1,2))); }
PS: la sortie est 12 f(1,2)
. Je pensais que c’était 12 12
ou f(1,2) f(1,2)
.
h(f(1,2))
f(1,2)
est substitué à a
. a
n’est pas le sujet d’un opérateur #
ou ##
, il est donc étendu à 12
. Maintenant vous avez g(12)
qui passe à "12"
.
g(f(1,2))
f(1,2)
est substitué à a
. L’opérateur #
appliqué à a
macro empêche l’expansion, donc le résultat est littéralement "f(1,2)"
.
Il suffit de faire les remplacements.
h(f(1, 2)) -> g(12) -> "12" g(f(1,2)) -> "f(1, 2)"
Vous devriez aussi voir ici .