0

を使用して 1 つのスレッドでファイルを開く Visual C++ プログラムがありますFILE* fp = fopen(...)。別のスレッドがファイルを読み取っている間、そのスレッドをイベントオブジェクトでブロックし、それが完了するとブロックされたスレッドに通知し、ファイルを閉じます。fpはスレッド間で共有されるため、 として宣言していvolatile FILE* fpます。ただし、その引数fread()として volatile を受け入れません。を呼び出すスレッドでFILE*、ローカル ポインターを使用してみましたが、次のようになりました。FILE* fpLocal = fp;fread()

 Error: a value of type "volatile FILE*" cannot be assigned to an entity of type "FILE*"

当然のことながら、あるスレッドでファイルを開いて別のスレッドで読み込もうとするのは間違いなのではないかと心配していますが、その理由は (まだ) わかりません。

誰かがこれで私を助けることができますか? volatile FILE*をに代入できないのはなぜFILE*ですか?

4

1 に答える 1

3

にを割り当てられないのはなぜvolatile FILE*ですかFILE*

C ++には厳密な型チェックがあり、互いに一致しない型を割り当てることはできないためです。
その場合はキャスト演算子を使用する必要がありますが、誤って使用すると未定義動作が発生する可能性があることに注意してください。この動作は、修飾子
の場合と同じです。const

コメントですでに述べたように、補足として、volatileここに行く方法ではありません。

于 2012-05-22T15:38:38.783 に答える