gpt4 book ai didi

c++ - 传递无效指针时 `ferror(FILE *)` 和 `std::ferror(FILE *)` 的行为是什么?

转载 作者:太空狗 更新时间:2023-10-29 19:45:13 24 4
gpt4 key购买 nike

::ferror(FILE *) 的行为是什么?和 std::ferror(FILE *)何时传递无效指针?

C++ 标准仅指 C(参见 draft)。但是在 C 标准中没有提及 ferror关于无效指针或 NULL 时发生的情况的函数描述已通过。

我理解为根据C稿N1570 §7.21.3.4:

The value of a pointer to a FILE object is indeterminate after the associated file is closed (including the standard text streams).

但这不应该阻止检查是否有给定 FILE * 的实现。指针(不确定与否)指的是有效 FILE对象。¹

无论哪种方式,标准似乎都没有说明这是未定义的行为、实现定义还是其他什么。


¹ 例如 fopen()可以将返回的指针存储在一些全局集合中(例如 std::set<FILE *> ),ferror()然后类似的函数可以检查他们的参数是否包含在该集合中,另外 fclose()将从该集合中删除它。

最佳答案

根据C稿N1570 §4.2 遗漏被认为是未定义的行为(强调已添加):

If a ‘‘shall’’ or ‘‘shall not’’ requirement that appears outside of a constraint or runtime-constraint is violated, the behavior is undefined. Undefined behavior is otherwise indicated in this International Standard by the words ‘‘undefined behavior’’ or by the omission of any explicit definition of behavior. There is no difference in emphasis among these three; they all describe ‘‘behavior that is undefined’’.

感谢Peter用于在对问题的评论中对此进行描述。

关于c++ - 传递无效指针时 `ferror(FILE *)` 和 `std::ferror(FILE *)` 的行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com