河野真治 @ 琉球大学情報工学です。

In article <041202115825.M0125172@flame.hirata.nuee.nagoya-u.ac.jp>, takao@hirata.nuee.nagoya-u.ac.jp (Takao Ono) writes
> 「処理系が理解している範囲においては変化しない (= const) が, 処理
> 系の知らないところで変化する可能性がある (= volatile)」ってことで
> すから.

変化する可能性があるってのは良いんですけど、「処理系が理解し
ている範囲においては変化しない (= const)」ってのは、const を
付けても付けてなくても、そうでないと困りますよね。

const ってのは、この場合は、「代入しない」っていうプログラマ
向けの宣言なのかな。「僕は馬鹿だから代入するかも知れないので、
ここで const って付けておこう」ってな感じ? それとも、コンパ
イラの方で const がついていると良いことがあるのかな。

ついでに、Linux kernel なんですけど、

   extern __inline__ ....
        __asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*ad
dr));

ここの volatile はなんで必要なんでしょう? inline 関数の多重
呼出しがあった時に一つにしてはいけないっていうコンパイラ向け
の宣言かな? そういうのは、

        __asm__ __volatile__("": : :"memory");

でやっているのかなと思ったんだけど、(これも良くわからないが...)
そうとはいかない場合のあるのかな。

どうも、なんか、const も volatile も restrict も、誰に向けた
宣言か良くわからなくって、adhoc な感じがして好きになれない...

理解したくないともいうか。

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科