用 C 编写代码时,使用-1
和EOF
可互换的风格是否良好?标准保证EOF
是-1
吗?还是定义了价值实现?
例如,如果一个函数EOF
在某些情况下返回,那么测试该函数是否返回是一种好方法-1
吗?
如果某个函数-1
在某些情况下返回,那么测试该函数是否返回是否是一种好方法EOF
?
用 C 编写代码时,使用-1
和EOF
可互换的风格是否良好?标准保证EOF
是-1
吗?还是定义了价值实现?
例如,如果一个函数EOF
在某些情况下返回,那么测试该函数是否返回是一种好方法-1
吗?
如果某个函数-1
在某些情况下返回,那么测试该函数是否返回是否是一种好方法EOF
?
不,EOF
当然不能保证是-1
.
它是一个宏,定义在<stdio.h>
,
它扩展为一个整数常量表达式,具有类型
int
和负值,由多个函数返回以指示 文件结束,即不再有来自流的输入
(引自 ISO C 标准的第 7.21.1 节)。
我从来没有见过一个实现,EOF
它的价值不是-1
——但我没有费心去检查。
使用EOF
而不是文字-1
可以避免您的代码在选择不同负值的实现上中断,但更重要的是,读者很清楚。如果我-1
在您的代码中看到,我将不确定您为什么选择该特定值。如果我看到EOF
,我完全知道你的意思。(即使标准要求EOF
具有值,这也适用-1
。)
至于一般的“幻数”,有些时候它们是不可避免的。评论中的一个示例:该getopt
函数被记录-1
为在某些情况下返回,因此您应该将其结果与 进行比较-1
,而不是与EOF
. 尽可能避免使用幻数,但如果文档使用它们,你就会被它们困住。