2011-08-08 5 views
2

私はNULLポインターをチェックする以下の関数実装を持っています。これは、Linuxのドライバ、Cコードの一部です:この場合、 "volatile"のメリットは何ですか?

bool is_null_ponter(volatile void* ptr) 
{ 
    return (NULL == ptr)? true : false; 
} 

その場合の揮発性の利点は何ですか?なぜそれをレジスタに入れないのですか?

ありがとうございます。

+0

http://stackoverflow.com/questions/3604569/what-kinds-of-optimizations-does-volatile-prevent-in-c/3604599#3604599を参照してください。類似した(しかし重複しないIMHO)質問 – jonsca

答えて

9

volatileは、volatileであってもエラーや警告なしに関数にすべてのポインタを渡すことができます。

これは偽装されていますが、あなたが見るドライバーは非常に専門的に書かれていないようです。

最初に、このようなポインタを完成させるには、const修飾子を指定する必要があります。次に、実際にすべてのポインタを取得します。

このような関数の使用例はまったくありません。 _Boolコンテキスト(ここでは!ptr)では、ポインターが当然正しい答えにつながります。これは標準で指定されています。ここで見ているように違うやり方をしているのは、おそらくカーネルコミュニティではすごく嫌なことです。このドライバーが正しく見直されていないと思います。

+1

私は同意します:私がこれを見て最初に思ったのは、 "この小さな宝石を誰がLinuxのレポに入れたかを見るために改訂履歴を見たいと思っています。 – Crashworks

+0

私はこのコードが揮発性変数へのポインタであることを意図していたと感じています(したがって、ポインターはすべての読み取りでderef'dする必要があります) – Necrolis

関連する問題