【发布时间】:2010-05-31 13:12:15
【问题描述】:
标准 C 库:
int fputc(int c , FILE *stream);
并且这样的行为多次出现,例如:
int putc(int c, FILE *stream);
int putchar(int c);
为什么不按原样使用 CHAR? 如果需要使用 INT,什么时候应该使用 INT 而不是 CHAR?
【问题讨论】:
标签: function
标准 C 库:
int fputc(int c , FILE *stream);
并且这样的行为多次出现,例如:
int putc(int c, FILE *stream);
int putchar(int c);
为什么不按原样使用 CHAR? 如果需要使用 INT,什么时候应该使用 INT 而不是 CHAR?
【问题讨论】:
标签: function
最可能(在我看来,由于早期 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);
}
【讨论】:
一个原因是在 C 的早期版本1 中没有char 参数。
是的,您可以将参数声明为char 或float,但它被视为int 或double。因此,将接口记录为采用char 参数会有些误导。
我相信今天对于没有原型声明的函数仍然如此,以便它可以与旧代码互操作。
【讨论】: