Почему '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
. Поэтому было бы несколько вводящим в заблуждение документировать интерфейс как принимающий