为什么不能将易失性文件*分配给文件*?

Why can't volatile FILE* be assigned to FILE*?

本文关键字:文件 分配 不能 易失性 为什么      更新时间:2023-10-16

我有一个Visual C++程序,可以在一个线程中打开一个文件,FILE* fp = fopen(...) .我希望该线程在另一个线程读取文件时阻塞事件对象,然后在完成后向被阻止的线程发出信号,然后关闭文件。由于fp在线程之间共享,因此我将其声明为 volatile FILE* fp 。但是,fread()不会接受波动性作为其FILE*论点。我尝试使用本地指针,线程中的FILE* fpLocal = fp;将调用fread(),但这让我明白了这一点:

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

当然,这让我担心,也许我尝试在一个线程中打开文件并在另一个线程中首先读取它而犯了一个错误,尽管我不明白为什么(还(。

有人可以帮助我吗?为什么我无法将volatile FILE*分配给FILE*

为什么我不能为FILE*分配volatile FILE*

因为C++有严格的类型检查,你不能分配彼此不匹配的类型。
如果是这种情况,则需要使用强制转换运算符,但重要的是要注意,不正确地使用它们也可能导致未定义的行为。
此行为与const限定符的行为相同。

正如评论中已经提到的旁注,volatile不是这里的方式。