>>253
int a = foo(x);
int b = bar(y);
int c = baz(a);
という呼び出しはbar()とbaz()の呼び出し順序が変わり得るが
(今のコンパイラがやらないのは>>252に書いたとおりだが、bar()とbaz()の間に順序依存の副作用が無いなら入れ替えてもアルゴリズムの等価性を変えない)、
int a = foo(x);
volatile int b = bar(y);
volatile int c = baz(a);
ならbへの代入とcへの代入の入れ替えは許されないからbar()とbaz()の呼び出しの入れ替わりも無くなる

>>254
volatileの仕様を正しく考えたことが無い人