よくわからない

$ cpp
#define a b 
#define b a
a
b
(Ctrl+D)


a
b
$ cpp
#define a b
#define b c
a
b
c
(Ctrl+D)


c
c
c
$ cpp
#define a() b()
#define b() a()
a()
b()
(Ctrl+D)
<stdin>:3: error: detected recursion whilst expanding macro "a"


<stdin>:4: error: detected recursion whilst expanding macro "b"
a()
b()

とりあえず関数マクロと単純置換で動作が違うっぽい(後者は再帰でエラーが出る)。
MCPPのソースでも読むか……。