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?