/*******************************************************/ #define MAX(x,y) ((x)>(y) ? (x):(y)) int a = 3; int b = 3; int m = MAX(a,++b); はプリプロセッサによって int a = 3; int b = 3; int m = ((a)>(++b) ? (a):(++b)); と展開されます。 結果的に++bが2度評価され、bとmは5になってしまいます。 /*******************************************************/ という記述を見たのですが、標準C++の規格ではbとmは5になるってのは保証されますか? 私には未定義の動作になりそうに見えるのですが。