EOF保证是-1吗?

Dav*_*vid 0 c standards language-implementation standards-compliance

用C语言编写代码时,使用-1EOF交替使用是否很好?标准保证EOF是这样的-1吗?或者是定义了价值实施?

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

如果函数-1在某些情况下返回,那么测试函数是否返回是否是好的样式EOF

Kei*_*son 9

不,EOF绝对不能保证-1.

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

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

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

我从来没有见过一个EOF除了以外有价值的实现-1- 但是我没有费心去检查.

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

至于"魔术数字"一般,有时候它们是不可避免的.注释中的一个示例:getopt函数被记录-1在某些情况下返回,因此您应该比较其结果-1,而不是EOF.尽可能避免使用魔术数字,但如果文档使用它们,那么你几乎就会被它们困住.

  • @David:`getopt`的文档说它在某些情况下返回`-1`,所以你应该把结果与`-1`进行比较.如果声明`getopt`的头定义了一个命名常量,那就好了,但事实并非如此.如果记录函数返回`EOF`,则将其结果与`EOF`进行比较.如果您的代码依赖于具有特定值的"EOF",则代码中存在问题. (4认同)