C言語関係掲示板

過去ログ

No.163.volatileの意味


No.1049

volatileについて
投稿者---roku(2002/02/13 10:03:58)


皆さん、
おはようございます。
いつも回答していただいて、有難うございます。

今日の質問は、
volatileの意味は良く分かりませんけど、
誰か説明してくださいね。
下はvolatileの例です、

******************************************************
volatile unsigned short count;
volatile unsigned char temp8 ; // wata ins
t = *(volatile unsigned int *)(0xfffffea4);


No.1050

Re:volatileについて
投稿者---こた(2002/02/13 14:55:11)


まいど!

volatileは最適化をするな」という意味の
(たぶん)C言語ではなくC++用語です。

例えば(出典:ものの本)

コード1:
int a = 0;
while (a == 0){
//なんかの処理
}

というコードがあった場合、
まともなコンパイラなら次のようにコードを
読み替えて(最適化して)コンパイルします。

コード2:
while (1){
//なんかの処理
}

その結果ここでは永久に「なんかの処理」
を行うことになります。
ところが、実はaはこのプログラム以外の
所から変更される変数でコード1は

aの値が(外部から)変更されるまで「なんかの処理」
を続ける

という処理だとすると、コード2に最適化されてしまうと
意味が変わってしまいます。それを防ぐため、

volatile int a = 0;

と宣言することにより、最適化をしないように指示することが
できます。

どうやってこのプログラム以外
のところから変数の値を変更するかは良く知りません
(http://www.compaq.co.jp/products/dvf/docs/vf-html/az/az12_30.htm
の「規則と振る舞い」の項になんか書いてある)

割り込みやマルチスレッドなど良くわからんものを使わない
普通のプログラムではあまり使わないでしょう。


No.1051

Re:volatileについて
投稿者---roku(2002/02/14 12:36:44)


こたさん、
ご熱心な説明有難うね!

>まいど!
どういう意味でしょうか?(僕はCHINESE)
余計な話だけど、
教えていただければ、嬉しいです。

又いろいろ教えてくださいね。


No.1053

Re:volatileについて
投稿者---こた(2002/02/14 19:05:07)


>こたさん、
>ご熱心な説明有難うね!
いえいえ。私も別の掲示板で
人に教えてもらったのでお返しです。

>>まいど!
>どういう意味でしょうか?(僕はCHINESE)
ほんと!わからなかった。

>余計な話だけど、
>教えていただければ、嬉しいです。
まいどは関西弁。
「毎度有難うございます」の略。関西商人の挨拶です。

>又いろいろ教えてくださいね。
はい。(私が答えられる質問なら)
そんじゃ頑張ってください。


戻る


「初心者のためのポイント学習C言語」 Last modified:2002.03.16
Copyright(c) 2000-2002 TOMOJI All Rights Reserved