fgetc, проверка EOF

В книгеLinux System Programming Я читал примерно так:

fgetc returns the character read as an unsigned char cast to an int or EOF on end of file or error. A common error using fgetc is:

char c;
if ((c = fgetc()) != EOF) {...}

The right version of this code is:

int c;
if ((c = fgetc()) != EOF) { printf("%c", (char)c); ... }

Итак, почему я не могу привести возвращаемое значение кchar перед сравнением сEOF? Почему я должен сравниватьEOF именно сint? КакEOF определяется как-1обычно не приводится кchar?
Есть ли платформы / компиляторы, где это не так?

Ответы на вопрос(2)

Ваш ответ на вопрос