上で #define b a + b してるから、
これ #define a a + b はすなわち #define a a + a + b 。
ゆえに printf("%d", a); は printf("%d", a + a + b); と展開される。
なので出力結果は1+1+2の4。

ファイルの上から順に、単純に文字列置換していくだけでいいのでは?>>569