Можно ли спутать EOF с обычным байтовым значением при использовании fgetc?

Мы часто используемfgetc как это:

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

Теоретически, если байт в файле имеет значениеEOF, этот код глючит - он рано нарушает цикл и не может обработать весь файл. Возможна ли такая ситуация?

Насколько я понимаю,fgetc внутренне отбрасывает прочитанный байт из файла вunsigned char а затемintи возвращает его. Это будет работать, если диапазонint больше, чем уunsigned char.

Что произойдет, если это не так (вероятно, тогдаsizeof(int)=1)?

Будетfgetc прочитать достоверные данные, равныеEOF из файла иногда?Изменит ли он данные, прочитанные из файла, чтобы избежать единственного значенияEOF?Будетfgetc быть невыполненной функцией?БудетEOF быть другого типа, какlong?

Я мог бы сделать мой код надежным путем дополнительной проверки:

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

Это необходимо, если я хочу максимальной мобильности?

Ответы на вопрос(3)

Ваш ответ на вопрос