В книге Системное программирование Linux я прочитал что-то вроде этого:
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
?
Есть ли платформы/компиляторы, на которых это неверно?
feof()
, поэтому он не является дубликатомwhile (!feof(file))
всегда неправильно а>. - person Jonathan Leffler   schedule 01.12.2014