Dav*_*vid 0 c standards language-implementation standards-compliance
用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.尽可能避免使用魔术数字,但如果文档使用它们,那么你几乎就会被它们困住.