EOF保证是-1吗?

时间:2014-03-02 00:59:40

标签: c standards standards-compliance language-implementation

在C中编写代码时,使用-1EOF是否可以互换?标准是否保证EOF-1?或者是定义了价值实施?

例如,如果函数在某些情况下返回EOF,那么测试函数是否返回-1是否是一种好的风格?

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

1 个答案:

答案 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 。尽可能避免使用魔术数字,但如果文档使用它们,那么你几乎就会被它们困住。