【发布时间】:2012-08-24 13:21:14
【问题描述】:
嗯,几个月前我读过另一本“众所周知”的 C 书(用我的语言),但我从来没有对此一无所知。 K&R 在 20 页中写了 3 章的方式简直令人惊叹,当然我不能指望巨大的解释,但这也引发了问题。
我对此点有疑问 1.5.1 这本书说(第 16 页):
main(){
int c;// <-- Here is the question
c=getchar();
while (c != EOF){
putchar(c);
c = getchar();
}
}
[...] char 类型专门用于存储此类字符 数据,但可以使用任何整数类型。我们用 int 来表示一个微妙但 重要原因。 问题是将输入的结尾与 有效数据。解决方案是 getchar 返回一个独特的值 当没有更多输入时,一个不能与任何输入相融合的值 真实的性格。此值称为 EOF,表示“文件结束”。我们必须 声明 c 是一个足够大的类型来保存 getchar 的任何值 返回。我们不能使用 char 因为 c 必须足够大才能容纳 EOF 除了任何可能的字符。因此我们使用 int.[...]
在谷歌搜索另一种解释后:
EOF 是一个表示文件结束的特殊宏(Linux:使用 CTRL+d 创建这个的键盘,Windows 命令:使用 CTRL+z(可能必须 在新行的开头,后跟 RETURN)):通常 EOF = -1,但 实现依赖。必须是无效值 对于任何可能的字符。由于这个原因,c 是 int 类型(不是 char 可能已经预料到了)。
所以我将源代码从 int 修改为 char 以查看有什么问题,关于取 EOF 值......但没有问题。以同样的方式工作。
我也没有解释 getchar 如何获取我写的每个字符并打印所有内容。 Int 类型是 4 字节长,因此它可以在一个变量中占用 4 个字符。 但我可以输入任意数量的字符,它会以相同的方式读取和写入所有内容。 而对于 char,也会发生同样的情况...... 真正发生了什么?超过 1-4 个字符时,值存储在哪里?
【问题讨论】:
标签: c types kernighan-and-ritchie