这个问题在这里已有答案:
我给出了函数的一部分以下代码:
char ch;
ch = fgetc(fp);
if (ch == EOF)
return -1;
其中 fp
是作为参数传递给函数的指向文件/流的指针 .
但是,检查了 fgetc()
, getc()
和 getchar()
的用法后,似乎它们都返回int类型而不是char类型,因为EOF不适合在char中使用的值0-255,因此通常<0(例如-1) . 但是,这让我提出三个问题:
-
如果
getchar()
返回int,为什么char c; c = getchar();
是该函数的有效用法?在这种情况下,C是否会自动键入强制转换为char,并且getchar()
替换为getc(fp)
或fgetc(fp)
? -
当
fgetc()
或其他两个函数返回EOF时,程序会发生什么?它会再次尝试像以前一样投射到角色然后失败吗?什么东西存储在ch
中? -
如果EOF实际上不是一个字符,
ch == EOF
如何进行有效比较,因为EOF不能用char变量表示?
1 回答
不是 . 只是因为你可以编写和编译(以某种方式)允许你编译它,不会使代码有效 .
我相信以上回答所有问题 .
只是要添加,如果返回
EOF
,则无法将其存储在char
中 .char
的签名是实现定义的,因此,根据章节6.3.1.3,C11