- ベストアンサー
volatileについて
volatileの意味は分かってるつもりではいるのですが、どういったとき使うのかいまいちわかりません。何かソースの例かURLをよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まずは過去ログを検索しよう。 http://okwave.jp/qa4514515.html http://okwave.jp/qa2808693.html http://okwave.jp/qa2615434.html http://okwave.jp/qa1986839.html http://okwave.jp/qa4374556.html 私は組み込み系(マイコン等で動作するプログラム)開発が主体なので、マイコンのプログラムを書くときはvolatileを多用しています。
その他の回答 (3)
- okazaki0ko
- ベストアンサー率15% (37/238)
書き忘れました。 デバイスから読み込むときも、volatile宣言しないと最適化で消されてしまいます。
- zwi
- ベストアンサー率56% (730/1282)
割り込みもそうですが、スレッド間でも使います。 volatile付けない変数とかだと最適化されちゃて最初しか変数を参照してくれないことが良く有りますね。 まぁ、volatileでどう変わるかはReleaseビルド時のアセンブルリストを出してみればわかります。
お礼
回答有難うございました。
- okazaki0ko
- ベストアンサー率15% (37/238)
割り込み関数との組み合わせで使うことが多いです。 volatile int atai_irq; int main( void ) { volatile int aru_atai; while ( 1 ) { aru_atai = atai_irq; // atai_irqは、割り込み関数など、どこか別の場所で変更される可能性がある。 // volatile宣言をしていないと、最適化で削除される可能性がある。 // なぜなら、このwhile文内でatai_irqは変更されないので、『意味のない』文とみなされるから。 } return 0; } // 別の関数(割り込み関数であることが多い) #pragma interrupt void int_foo( void ) { atai_irq ++; // なんでも良いのでatai_irqの値を変更する。 }
お礼
回答有難うございました。
お礼
回答有難うございます。ありがたく参考させていただきます。