質問: st_m->u1_v_pattern_ol[st_m->u1_direction][st_m->u1_v_pattern_num]; }
回答: > > この構造体にはvolatileが付いていますが、どういった値を最適化から防ぐ目的があるのでしょうか? > > > たとえば: ``` int value; for (;;) { /* 無限ループ */ if ( value != 0 ) break; /* value が0でなくなったら脱出する */ sleep(100); /* 100ms ベタ待ち */ } ``` なんてのがあって、ここでvalueはハードウェア割り込みかなんかで(実行中に)コロコロ変化するとしましょう。 このときコンパイラは「このvalueはloop内で書き換えられていないから一回だけ読めばえぇやろ」ってな最適化を行うことがあります。そんな最適化されちゃうとloopから抜けらんなくなる。 なんてとき `volatile int value` としておけば、最適化せずに毎回律儀にvalueの値を読んでくれます。