传递无效指针时 ::ferror(FILE *)
和 std::ferror(FILE *)
的行为是什么?
C++ 标准仅指 C(参见 draft )。但是在 C 标准中,在 ferror
函数描述下没有提及传递无效指针或 NULL
时会发生什么。
我明白,根据 C 草案 N1570 §7.21.3.4:
但这不应该阻止检查任何给定的 FILE *
指针(不确定)是否引用有效的 FILE
对象的实现。¹
无论哪种方式,标准甚至似乎都没有说明这是未定义的行为、已定义的实现还是其他什么。
¹ 例如 fopen()
可以将返回的指针存储在某个全局集合(例如 std::set<FILE *>
)中,然后 ferror()
和类似函数可以检查它们的参数是否包含在该集合中,另外 fclose()
会将其从该集合中删除。
最佳答案
根据 C 草案 N1570 §4.2 遗漏被认为是未定义的行为(强调添加):
感谢 Peter 在对问题的评论中对此进行了描述。
关于c++ - 传递无效指针时 `ferror(FILE *)` 和 `std::ferror(FILE *)` 的行为是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57657798/