Символы и целые числа довольно тесно связаны в C.
Когда вы получаете символ из входного потока, он должен иметь возможность представлять каждый отдельный символ плюс конецсимвол файла.
Это означает, что тип char
не будет достаточно большим, поэтому они используют более широкий тип.
Обоснование документа C99 гласит:
Поскольку эти функции часто используются в основном как макросы, их область ограничена маленькими положительными целыми числами, представленными в беззнаковом символе, плюс значением EOF.EOF традиционно равен -1, но может быть любым отрицательным целым числом и, следовательно, отличаться от любого допустимого кода символа.Таким образом, эти макросы могут быть эффективно реализованы путем использования аргумента в качестве индекса в небольшом массиве атрибутов.
В самом стандарте есть следующее:
Заголовок <ctype.h>
объявляет несколько функций, полезных для классификации и сопоставления символов.Во всех случаях аргументом является int, значение которого должно быть представлено как беззнаковый символ или должно равняться значению макроса EOF.Если аргумент имеет любое другое значение, поведение не определено.