volatile
揮発性。
C で、volatile という語は、const のように、変数を修飾するために使います。volatile な変数は、コンパイラによる最適化が抑えられます。
#define DOTIMES 500 void func() { int i, cond = 0 for (i = 0; i < DOTIMES; i++) { if (cond) do_something(); } }
のようなコードがあった時、コンパイラの最適化の場合によっては、無駄な条件分岐を抑えるために、以下のようなコードに変更される可能性があります。
if (cond) for (i = 0; i < DOTIMES; i++) do_something();
もう眠たいので寝ます。
ヒント: 揮発性だよ、と言うのは、中身が変わり得る、と言うこと。字面上では cond の中身は変わらないように見えるので、二つのコードは等価に見えるが、 cond の中身が変わり得るとしたらどうか?volatile 修飾子によって、このような最適化を抑えることが出来るならば、それはどのような意味を持つのか?