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 修飾子によって、このような最適化を抑えることが出来るならば、それはどのような意味を持つのか?