#define N 1 #define A(N) #N #define S_A A(N) #define B_(N) #N #define B(N) B_(N) #define S_B B(N) #include <stdio.h> int main(void) { puts(S_A); puts(S_B); } outputs N and 1 instead of two 1s.
Why is the extra indirection making a difference?