在Linux System Programming一书中,我读过这样的书:
fgetc
将读取的字符作为unsigned char
强制转换返回到文件或错误的结尾int
或EOF
结尾。使用的一个常见错误fgetc
是:char c; if ((c = fgetc()) != EOF) {...}
此代码的正确版本是:
int c; if ((c = fgetc()) != EOF) { printf("%c", (char)c); ... }
那么,为什么我不能char
在与比较之前将返回值转换为EOF
?为什么我必须与EOF
精确比较int
?如EOF
定义为-1
,它通常不是转换为char
吗?
是否存在不正确的平台/编译器?