fgetc, verificando EOF
No livroProgramação do Sistema Linux Eu li alguns assim:
fgetc
retorna o caractere lido comounsigned char
elenco para umint
ouEOF
no final do arquivo ou erro. Um erro comum usandofgetc
é:
char c;
if ((c = fgetc()) != EOF) {...}
A versão correta deste código é:
int c;
if ((c = fgetc()) != EOF) { printf("%c", (char)c); ... }
Então, por que não posso lançar um valor de retorno parachar
antes de comparar comEOF
? Por que eu tenho que compararEOF
exatamente comint
? ComoEOF
definido como-1
, normalmente não é lançado parachar
?
Existem plataformas / compiladores onde isso não é verdade?