fgetc, проверка EOF

В книге 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?
Существуют ли платформы/компиляторы, на которых это неверно?

10
задан Eitan T 17 June 2012 в 12:17
поделиться