В книге Linux System Programmingя читал примерно следующее:
fgetc
возвращает символ, прочитанный какunsigned char
, приведенный кint
илиEOF
в конце файла или ошибка. Распространенная ошибка при использованииfgetc
:char c; если ((c = fgetc()) != EOF) {...}
Правильная версия этого кода:
int c; if ((c = fgetc()) != EOF) { printf("%c", (char)c); ... }
Итак, почему я не могу привести возвращаемое значение к char
перед сравнением с EOF
? Почему я должен сравнивать EOF
именно с int
? Поскольку EOF
определяется как -1
, разве он обычно не приводится к char
?
Существуют ли платформы/компиляторы, на которых это неверно?