fgetc, sprawdzanie EOF

W książceProgramowanie systemu Linux Przeczytałem kilka takich:

fgetc zwraca znak odczytany jakounsigned char rzucić naint lubEOF na końcu pliku lub błędu. Typowy błąd podczas używaniafgetc jest:

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

Odpowiednia wersja tego kodu to:

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

Dlaczego więc nie mogę oddać wartości zwracanej dochar przed porównaniem zEOF? Dlaczego muszę porównaćEOF dokładnie zint? Tak jakEOF zdefiniowana jako-1, czy nie jest to normalnie rzucanechar?
Czy są platformy / kompilatory, w których nie jest to prawda?

questionAnswers(2)

yourAnswerToTheQuestion