Тип char - это не что иное, как целое число, которое в большинстве случаев представляет собой только 8-битный байт. Тип int представляет собой целое число, которое обычно шире и поэтому может сохранять все возможные значения, которые может хранить символ. Чтобы выполнить проверку, она должна содержать это значение sizeof(int) > sizeof(char)
. Почти всегда это так. Но если я хорошо помню, сказано, что стандарт не предусматривает этого; это означает, что единственный переносимый и безопасный способ проверить, является ли уже прочитанный EOF реальным концом файла или нет, его нужно проверить с помощью feof(FILE *)
. (Например, если в вашей системе CHAR_BIT равно 16, sizeof (char) == 1 по определению, но sizeof (int) может быть 1 тоже).
Обратите внимание, что причина использования int вместо char заключается в том, что система должна иметь возможность сигнализировать EOF - и для этого используется специальное возвращаемое значение -1 (что эквивалентно константе EOF). Поскольку этот -1 не вписывается в char, результат getchar() вместо этого сохраняется как int. – mfrankli
Формулировка делает звук таким, как int, обычно 4 байта (true), а символ обычно 1 байт (не совсем так, потому что char всегда * 1 байт). Тем не менее, +1 за хороший ответ. –
@mfrankli: вы * можете * поместить -1 в 'char', если тип' char' будет реализован, и многие из них, и правила преобразования позволяют '-1' быть преобразованы в' char', если это подписан. Причина 'getchar' возвращает' int', потому что она всегда * подписана, а 'EOF' определяется как любое отрицательное число (не обязательно -1, но обычно оно). – dreamlax