在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吗?
是否存在不正确的平台/编译器?