В C строки являются массивами char (char *
), и символы обычно хранятся в char
. Я заметил, что некоторые функции из libC принимают за целые числа аргументов вместо char.
Например, возьмем функции toupper()
и tolower()
, которые используют int
. На странице руководства написано:
Если c не является значением без знака char или EOF, поведение этих функции undefined.
Я предполагаю, что с int
, toupper
и tolower
могут иметь дело с unsigned char
и EOF
. Но на самом деле EOF
на практике (есть ли какое-либо правило о его значении?) Значение, которое может быть сохранено с помощью char
, и поскольку эти функции не преобразуют EOF
во что-то другое, мне интересно почему toupper
не просто принимает аргумент char.
В любом случае, почему нам нужно принимать что-то, что не является символом (например, EOF)? Может ли кто-нибудь предоставить мне соответствующий прецедент?
Это похоже на fputc
или putchar
, которые также принимают int
, который в любом случае преобразован в unsigned char
.
Я ищу точные мотивы для этого выбора. Я хочу убедиться, я не хочу отвечать, что не знаю, спросит ли кто-нибудь меня однажды.