EOF 的实际实现不同于 -1

Actual implementation of EOF different from -1

POSIXEOF 定义为扩展为负值的宏:

The header shall define the following macro which shall expand to an integer constant expression with type int and a negative value:

EOF

End-of-file return value.

在我能找到的每个实现中,EOF总是定义为-1.

虽然标准确实允许不同的值,但我找不到发生这种情况的任何具体实现,我想找到一个用于测试目的。1

1 我可以自己实现,但我的真正目的是 "find it in the wild",由于无法证明它不存在, 是我能想到的下一个最好的事情。

,但是最后问了两个问题,接受的答案只回答了第二个(大约WEOF)。另一个用户对第一个问题的回答是否定的,但由于该问题仅限于 常见的 C 环境 ,因此否定是正确的:-1 很可能是用于任何具有小字符类型的合理实现.

由于我的问题是关于存在,真正回答它的唯一方法是提供一个例子,所以我会改写一下:请提供一个例子EOF != -1 的现有实现。无论是 newlib 还是 musl,PDP 还是 VAX,Plan 9 还是 Hurd,libc/hardware/operating 系统与 POSIX 兼容或 ISO C 兼容的 libc 的任意组合都是有效的。

懒惰的星期天,所以我找到了这个 https://github.com/xinu-os/xinu which comes with this https://github.com/xinu-os/xinu/blob/master/include/stddef.h 列表

#define EOF (-2) /**< End-of-file (usually from read)    */

:-)

可追溯到 1987 年的 Xinu 资源在这里:https://www.tuhs.org//cgi-bin/utree.pl?file=Xinu7 不幸的是,它似乎使用 -1 作为 EOF 的值。 :-(