为什么 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
类型可以是有符号或无符号的;这是实现定义的。
函数fgetc
、getc
和getchar
可用于处理二进制流,而不仅仅是文本流。字节的值从 0 到 UCHAR_MAX
。此范围的自然类型是 unsigned char
。 getc
的 return 值不能是 unsigned char
,因为 EOF
无法表示。它也不能是 signed char
,因为 signed char
不能保存从 0 到 UCHAR_MAX
的值。因此,选择了更广泛的类型:类型 int
。在主流平台上,int
比 char
宽:它的大小至少为 2。因此它能够表示一些可用于 EOF
的负值,并且0 到 UCHAR_MAX
.
范围内的所有字节值
在某些 C 实现中(对于某些 DSP 芯片等系统),这是不正确的:int
是一个字节宽。这代表着挑战。在这样的 C 实现中,由 getc
编辑的一系列有效字节值 return 必须为负,并且其中一个值与 EOF
冲突。仔细编写的代码可以看出是这种情况:等于 EOF
的值被 returned,但 feof
和 ferror
函数报告错误:流不在错误,并且没有发生文件结束。因此,看起来像 EOF
的值实际上是一个有效字节。
到目前为止,我发现我们使用 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
类型可以是有符号或无符号的;这是实现定义的。
函数fgetc
、getc
和getchar
可用于处理二进制流,而不仅仅是文本流。字节的值从 0 到 UCHAR_MAX
。此范围的自然类型是 unsigned char
。 getc
的 return 值不能是 unsigned char
,因为 EOF
无法表示。它也不能是 signed char
,因为 signed char
不能保存从 0 到 UCHAR_MAX
的值。因此,选择了更广泛的类型:类型 int
。在主流平台上,int
比 char
宽:它的大小至少为 2。因此它能够表示一些可用于 EOF
的负值,并且0 到 UCHAR_MAX
.
在某些 C 实现中(对于某些 DSP 芯片等系统),这是不正确的:int
是一个字节宽。这代表着挑战。在这样的 C 实现中,由 getc
编辑的一系列有效字节值 return 必须为负,并且其中一个值与 EOF
冲突。仔细编写的代码可以看出是这种情况:等于 EOF
的值被 returned,但 feof
和 ferror
函数报告错误:流不在错误,并且没有发生文件结束。因此,看起来像 EOF
的值实际上是一个有效字节。