传递无效指针时 ::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/

10-11 22:12
查看更多