Почему 'fputc' использует INT в качестве параметра вместо CHAR? - PullRequest
7 голосов
/ 31 мая 2010

стандарт C lib:

int fputc(int c , FILE *stream);

И такое поведение встречалось много раз, например:

    int putc(int c, FILE *stream);
    int putchar(int c);

почему бы не использовать CHAR таким, какой он есть на самом деле? Если необходимо использовать INT, когда мне следует использовать INT вместо CHAR?

Ответы [ 2 ]

10 голосов
/ 31 мая 2010

Большинство вероятно (по моему мнению, поскольку большая часть обоснования раннего C теряется в недрах времени), это было просто для отражения типов, используемых в функциях типа fgetc, которые должен иметь возможность вернуть любой действительный символ плюс специальный символ EOF. Функция fgetc возвращает следующий символ, преобразованный в int, и использует специальное значение маркера EOF для указания конца потока.

Для этого им нужен был более широкий тип int, поскольку char недостаточно большой, чтобы вместить все возможные символы плюс еще одну вещь.

И, поскольку разработчики C, похоже, предпочитают довольно минималистский подход к коду, имеет смысл, что они будут использовать один и тот же тип, чтобы учесть такой код, как:

filecopy(ifp, ofp)
    FILE *ifp;
    FILE *ofp;
{
    int c;
    while ((c = fgetc (ifp)) != EOF)
        fputc (c, ofp);
}
4 голосов
/ 09 августа 2015

Нет параметров char в K & R C

Одна из причин в том, что в ранних версиях 1 C не было char параметров.

Да, вы можете объявить параметр как char или float, но он считается int или double. Следовательно, было бы несколько ошибочным указывать интерфейс как принимающий аргумент char.

Я полагаю, что это все еще верно сегодня для функций, объявленных без прототипов, чтобы можно было взаимодействовать со старым кодом.


1. Рано, но все еще широко распространено. Си имел быстрый успех и стал первым (и до сих пор главным образом единственным ) широко успешным языком системного программирования.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...