为什么 C 中的 getchar() 函数是一个整数?

Why is getchar() function in C an Integer?

到目前为止,我发现我们使用 getchar() 作为 int 因为在 EOF 这个函数 returns -1。我想知道 char 不能保持 -1 吗?我认为可以,因为它的范围也可以从 -128 到 127。

我搜索了 google 的顶部列表,但得到的答案并不令我满意。

getchar() 和 family return 一个整数,这样 EOF -1 就可以与 (char)-1(unsigned char)255.

区分开来

Chars,使用Ascii编码,使用字节存储,字节是无符号的8位整数。因此 chars 可以取 0-255 之间的数值。

getchar returns 允许 -1 的有符号整数,这是文件结尾 (EOF) 的幻数

首先,澄清一下,EOF 不需要特别是 -1。 ISO C 标准要求它具有负值。

另请注意,char 类型可以是有符号或无符号的;这是实现定义的。

函数fgetcgetcgetchar可用于处理二进制流,而不仅仅是文本流。字节的值从 0 到 UCHAR_MAX。此范围的自然类型是 unsigned chargetc 的 return 值不能是 unsigned char,因为 EOF 无法表示。它也不能是 signed char,因为 signed char 不能保存从 0 到 UCHAR_MAX 的值。因此,选择了更广泛的类型:类型 int。在主流平台上,intchar 宽:它的大小至少为 2。因此它能够表示一些可用于 EOF 的负值,并且0 到 UCHAR_MAX.

范围内的所有字节值

在某些 C 实现中(对于某些 DSP 芯片等系统),这是不正确的:int 是一个字节宽。这代表着挑战。在这样的 C 实现中,由 getc 编辑的一系列有效字节值 return 必须为负,并且其中一个值与 EOF 冲突。仔细编写的代码可以看出是这种情况:等于 EOF 的值被 returned,但 feofferror 函数报告错误:流不在错误,并且没有发生文件结束。因此,看起来像 EOF 的值实际上是一个有效字节。