volatile
カテゴリ
構文
volatile <data definition> ;
説明
volatile 修飾子を使用して、バックグラウンド ルーチン、割り込みルーチン、または I/O ポートが変数を変更できることを示します。 オブジェクトを volatile として宣言することで、そのオブジェクトが含まれる式を評価するときに、オブジェクトの値に関する仮定を行わないようにコンパイラに警告します。 その値はいつでも変更される可能性があるからです。 また、コンパイラが変数を レジスタ 変数にしないようにします。
volatile int ticks; void timer( ) { ticks++; } void wait (int interval) { ticks = 0; while (ticks < interval); // Do nothing }
この例は(timer はハードウェア クロック割り込みに適切に関連付けられているとする)、引数 interval で指定された時間の待機を実装します。 高度に最適化されたコンパイラは、while ループでは ticks の値を変更しないため、while ループのテスト内に ticks の値を読み込まない可能性があります。
メモ: C++ では volatile の機能が拡張され、クラスとメンバ関数も対象にできるようになりました。 volatile オブジェクトを宣言している場合は、そのオブジェクトの volatile メンバ関数だけが使用できます。