EOF总是负面的吗?

Ree*_*Ree 7 c

EOF总是负面的吗?

我正在考虑编写一个函数来读取输入中的下一个单词并返回找到该单词的行号或者如果已到达输入结尾则返回EOF.如果EOF不一定是负数,则函数将是不正确的.

gnu*_*nud 15

EOF总是如此== EOF.不要假设其他任何事情.

在标准的二读(并且根据此处的一些其他评论),似乎EOF总是负的 - 并且对于在该问题中指定的用途(行号或EOF),它将起作用.我打算警告(现在仍然如此)假设字符为正,EOF为负.

请记住,标准符合C的实现可能具有负字符值 - 甚至在'C编程语言'(K&R)中也提到过.打印字符总是正面的,但在某些体系结构(可能是所有古代)上,控制字符都是负面的.C标准没有指定char类型是有符号还是无符号,并且唯一保证在平台上具有相同值的字符常量是'\0'.

  • 这是不正确的.EOF宏**必须**扩展为负整数,遗憾的是我现在还没有我的标准副本. (6认同)

pmg*_*pmg 10

是的,EOF总是消极的.

标准说:

7.19输入/输出
7.19.1简介

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

请注意,char签署"plain"没有问题.<stdio.h>处理chars 的函数,特别是将字符转换为unsigned char然后转换为int,以便所有有效字符都具有正值.例如:

int fgetc(FILE *stream)
Run Code Online (Sandbox Code Playgroud)

7.19.7.1
... fgetc函数将该字符作为转换为int的unsigned char获取...

  • 如果`sizeof(char)== sizeof(int)`有一个问题,尽管即使通过`unsigned char`进行转换也不一定会使所有有效的`char`值保持正值.幸运的是,这是相对罕见的. (3认同)

ndi*_*dim 8

有那个功能返回

  • 找到该单词的行号
  • 如果已到达输入的末尾,则返回-1

问题解决了,无需依赖任何EOF值.呼叫者可以轻松地测试成功呼叫的大于或等于零,否则假设为EOF/IO错误.