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

main() {
printf("%s\n", opname);
}

これで
plus
が出力される理屈を教えてください。

OP -> plusはいつ変換されるんですか?