É possível confundir EOF com um valor normal de bytes ao usar o fgetc?

Costumamos usarfgetc como isso:

int c;
while ((c = fgetc(file)) != EOF)
{
    // do stuff
}

Teoricamente, se um byte no arquivo tiver o valor deEOF, esse código é incorreto - ele interrompe o ciclo mais cedo e falha ao processar o arquivo inteiro. Esta situação é possível?

Tanto quanto eu entendo,fgetc lança internamente uma leitura de bytes do arquivo paraunsigned char e depois parainte retorna. Isso funcionará se o intervalo deint é maior que o deunsigned char.

O que acontece se não for (provavelmente entãosizeof(int)=1)?

Vaifgetc ler dados legítimos iguais aEOF de um arquivo às vezes?Isso alterará os dados lidos no arquivo para evitar o valor únicoEOF?Vaifgetc ser uma função não implementada?VaiEOF ser de outro tipo, comolong?

Eu poderia fazer meu código à prova de falhas com uma verificação extra:

int c;
for (;;)
{
    c = fgetc(file);
    if (feof(file))
        break;
    // do stuff
}

É necessário se eu quiser a portabilidade máxima?

questionAnswers(3)

yourAnswerToTheQuestion