【发布时间】:2016-07-02 15:07:23
【问题描述】:
我刚开始学习C 编程语言,我想问你这个问题:
我知道函数getchar() 为您提供了一个始终为正的整数。
例如\t 的结果是 32,这个值可以存储在 char 中。
K&R 的书说 -1 的 EOF 不能存储在 char 中(但实际上它可以)。
无论如何,它不适用于 unsigned char。
我对此的解释是char可以存储从-127到127的值,所以它可以包含-1,但是unsigned char只能从0到255,所以它不能包含-1。
我说的对吗?为什么 K&R 的书这么说?
【问题讨论】:
-
"例如对于 \t 结果是 32" 你的意思是 9 吗?
-
我没看过。但也许他们谈论的是 eof 的概念值,它必须表示“不是字符值”。 -1 是它在字符来自 0 .. 255 的上下文中的值。如果您用 -128 .. 127 表示字符,显然 EOF 的整数值必须不同。
-
可以读取 256 个不同的字符。这意味着 char 可以采用的每个值都是有效结果。这就是 EOF 不适合 char 以及 getchar 返回 int 的原因。
-
char类型在 K&R 时代是未签名的。一些编译器仍然有一个compat option 来倒带时钟。