Почему 'fputc' использует INT в качестве параметра вместо CHAR?

стандартный C lib:

int fputc(int c , FILE *stream);

и такое поведение происходило много раз, e.g:

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

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

2 ответов


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

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

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

filecopy(ifp, ofp)
    FILE *ifp;
    FILE *ofp;
{
    int c;
    while ((c = fgetc (ifp)) != EOF)
        fputc (c, ofp);
}

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

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

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