При использовании fgetc
для чтения следующего символа потока вы обычно проверяете, что конец файла не был достигнут
if ((c = fgetc (stream)) != EOF)
где c
имеет тип int
. Затем либо достигнут конец файла, либо условие будет терпеть неудачу, либо c
будет unsigned
char, преобразованным в int
, который, как ожидается, будет отличаться от EOF
-for EOF
оказывается отрицательным. Хорошо... видимо.
Но есть небольшая проблема... Обычно тип char
имеет не более 8 бит, а int
должен иметь не менее 16 бит, поэтому каждый unsigned char
будет представлен как int
. Тем не менее, в случае, если char
будет иметь 16 или 32 бита (я знаю, это никогда не бывает на практике...), нет причин, по которым нельзя было sizeof(int) == 1
, так что это было бы (теоретически!) возможно, что fgetc (stream)
возвращает EOF
(или другое отрицательное значение), но этот конец файла не был достигнут...
Я ошибаюсь? Это что-то в стандарте C, которое предотвращает возврат fgetc
EOF
, если конечный файл не был достигнут? (Если да, я не мог найти его!). Или синтаксис if ((c = fgetc (stream)) != EOF)
не полностью переносимый?...
EDIT: Действительно, это был дубликат вопроса # 3860943. Я не нашел этот вопрос при первом поиске. Спасибо за помощь!: -)