在书籍 Linux系统编程 中,我读到了类似以下内容的描述:
fgetc
返回读取的字符作为无符号字符转换为int
或者在文件结束或出错时返回EOF
。使用fgetc
的一个常见错误是:char c; if ((c = fgetc()) != EOF) {...}
这段代码的正确版本是:
那么,为什么我不能将返回值强制转换为int c; if ((c = fgetc()) != EOF) { printf("%c", (char)c); ... }
char
,然后再与EOF
进行比较呢?我为什么必须准确地用int
来比较EOF
?因为EOF
被定义为-1
,它不是通常强制转换为char
吗?是否有平台/编译器,这种说法不成立?
feof()
,因此它不是 "while (!feof(file))
is always wrong" 的重复。 - Jonathan Leffler