为什么'fputc'使用INT作为参数而不是CHAR?

时间:2010-05-31 13:12:15

标签: function

标准C lib:

int fputc(int c , FILE *stream);

这种行为多次发生,例如:

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

为什么不使用CHAR,因为它确实是这样? 如果需要使用INT,我何时应该使用INT而不是CHAR?

2 个答案:

答案 0 :(得分:10)

大多数可能(在我看来,由于早期C背后的大部分理由都在时间的深处丢失了),它只是反映了fgetc中使用的类型。类型函数必须能够返回任何真实字符 plus EOF特殊字符。 fgetc函数将下一个字符转换为int,并使用特殊标记值EOF来指示流的结尾。

为此,他们需要更广泛的int类型,因为char不足以容纳所有可能的字符以及另外一件事。

而且,由于C的开发人员似乎更喜欢使用相当极简主义的代码方法,因此有意义的是他们会使用相同的类型,以允许代码如下:

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

答案 1 :(得分:4)

K& R C中没有char参数

一个原因是在C的早期版本 1 中没有char个参数。

是的,您可以将参数声明为charfloat,但会将其视为intdouble。因此,将接口记录为采用char参数会有些误导。

我认为,对于没有原型声明的函数,今天仍然如此,以便能够与旧代码进行互操作。

<小时/> 1。早,但仍然普遍。 C取得了快速成功,成为第一个(现在仍然是唯一的唯一)广泛成功的系统编程语言。