>>157

char *opname = Xstr(OP);
↓ #define OP plus
char *opname = Xstr(plus);
↓ #define Xstr(x) Str(x)
char *opname = Str(plus);
↓ #define Str(x) #x
char *opname = "plus";

OPは一番最初に展開される
(ISO/IEC 14882 16.3.1 : 実引数を代入する前に、実引数中の全てのマクロを展開する)
ので、Xstr(OP); ではまずOPが展開される。
ただし、#や##に対応する仮引数は先に展開されない(同 16.3.1)から、

#define Str(x) #x
#define OP plus
char *opname = Str(OP);

としてしまうと、(Str(x)のxが先に展開されないでそのまま代入されるので)
"OP"が出力されてしまうはず。
それを避けるためにXstrマクロをワンクッション置いて使ってるのかと。
ていうか使い道のないコードだな。