При использовании 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. Я не нашел этот вопрос при первом поиске. Спасибо за помощь!: -)
