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