¿Es posible confundir EOF con un valor de byte normal cuando se usa fgetc?

A menudo utilizamosfgetc Me gusta esto:

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

Teóricamente, si un byte en el archivo tiene el valor deEOF, este código tiene errores: romperá el bucle temprano y no podrá procesar todo el archivo. ¿Es posible esta situación?

Hasta donde yo entiendo,fgetc internamente emite un byte leído del archivo aunsigned char y luego aint, y lo devuelve. Esto funcionará si el rango deint es mayor que el deunsigned char.

¿Qué sucede si no es así?sizeof(int)=1)?

Seráfgetc leer datos legítimos iguales aEOF de un archivo a veces?¿Alterará los datos que lee del archivo para evitar el valor único?EOF?Seráfgetc ser una función no implementada?SeráEOF ser de otro tipo, comolong?

Podría hacer que mi código sea infalible mediante un control adicional:

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

¿Es necesario si quiero la máxima portabilidad?

Respuestas a la pregunta(3)

Su respuesta a la pregunta