よくわからない
$ 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のソースでも読むか……。