fgetc, comprobando EOF

En el libroProgramación del sistema Linux He leído algo como esto:

fgetc devuelve el carácter leído comounsigned char lanzar a unint oEOF Al final del archivo o error. Un error común usandofgetc es:

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

La versión correcta de este código es:

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

Entonces, ¿por qué no puedo emitir un valor de retorno achar antes de comparar conEOF? ¿Por qué tengo que comparar?EOF exactamente conint? ComoEOF definido como-1, no es normalmente casteado achar?
¿Hay plataformas / compiladores donde no es cierto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta