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