Ist es möglich, EOF mit einem normalen Bytewert zu verwechseln, wenn fgetc verwendet wird?

Wir benutzen oftfgetc so was

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

Theoretisch, wenn ein Byte in der Datei den Wert @ hEOF, dieser Code ist fehlerhaft - er unterbricht die Schleife vorzeitig und kann nicht die gesamte Datei verarbeiten. Ist diese Situation möglich?

So weit ich das verstehe,fgetc wandelt intern ein gelesenes Byte aus der Datei in @ unsigned char und dann zuint und gibt es zurück. Dies funktioniert, wenn der Bereich vonint ist größer als das vonunsigned char.

Was passiert, wenn es nicht ist (wahrscheinlich dannsizeof(int)=1)?

Willefgetc Liest legitime Daten, die gleich @ sinEOF aus einer Datei manchmal? Ändert es die Daten, die es aus der Datei liest, um den Einzelwert @ zu vermeideEOF?Willefgetc eine nicht implementierte Funktion sein?WilleEOF von einem anderen Typ sein, wielong?

Ich könnte meinen Code durch eine zusätzliche Überprüfung narrensicher machen:

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

Ist es notwendig, wenn ich maximale Portabilität will?