• ベストアンサー

volatileについて

volatileの意味は分かってるつもりではいるのですが、どういったとき使うのかいまいちわかりません。何かソースの例かURLをよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Interest
  • ベストアンサー率31% (207/659)
回答No.2

まずは過去ログを検索しよう。 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を多用しています。

79562
質問者

お礼

回答有難うございます。ありがたく参考させていただきます。

その他の回答 (3)

回答No.4

書き忘れました。 デバイスから読み込むときも、volatile宣言しないと最適化で消されてしまいます。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

割り込みもそうですが、スレッド間でも使います。 volatile付けない変数とかだと最適化されちゃて最初しか変数を参照してくれないことが良く有りますね。 まぁ、volatileでどう変わるかはReleaseビルド時のアセンブルリストを出してみればわかります。

79562
質問者

お礼

回答有難うございました。

回答No.1

割り込み関数との組み合わせで使うことが多いです。 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の値を変更する。 }

79562
質問者

お礼

回答有難うございました。

関連するQ&A

専門家に質問してみよう