0

用 C 编写代码时,使用-1EOF可互换的风格是否良好?标准保证EOF-1吗?还是定义了价值实现?

例如,如果一个函数EOF在某些情况下返回,那么测试该函数是否返回是一种好方法-1吗?

如果某个函数-1在某些情况下返回,那么测试该函数是否返回是否是一种好方法EOF

4

1 回答 1

9

不,EOF当然不能保证是-1.

它是一个宏,定义在<stdio.h>,

它扩展为一个整数常量表达式,具有类型int和负值,由多个函数返回以指示 文件结束,即不再有来自流的输入

(引自 ISO C 标准的第 7.21.1 节)。

我从来没有见过一个实现,EOF它的价值不是-1——但我没有费心去检查。

使用EOF而不是文字-1可以避免您的代码在选择不同负值的实现上中断,但更重要的是,读者很清楚。如果我-1在您的代码中看到,我将不确定您为什么选择该特定值。如果我看到EOF,我完全知道你的意思。(即使标准要求EOF具有值,这也适用-1。)

至于一般的“幻数”,有些时候它们是不可避免的。评论中的一个示例:该getopt函数被记录-1为在某些情况下返回,因此您应该将其结果与 进行比较-1,而不是与EOF. 尽可能避免使用幻数,但如果文档使用它们,你就会被它们困住。

于 2014-03-02T01:04:54.320 回答