与getc系列函数返回值比较前,是否需将字符转为unsigned char?
getc系列函数返回值比较前是否需要转换为unsigned char?
我不确定在与getc、fgetc、getchar这类getc系列函数的返回值做比较前,是否必须把字符转换为unsigned char。本文仅讨论单字节字符场景。
未进行转换的示例代码
#include <stdio.h> int main(void) { int c; while ((c = getchar()) != '\n' && c != EOF) // 循环直到换行符或EOF putchar(c); return 0; }
进行转换的示例代码
#include <stdio.h> int main(void) { int c; while ((c = getchar()) != (unsigned char)'\n' && c != EOF) // 循环直到换行符或EOF putchar(c); return 0; }
在我当前的实现环境中,两种写法都能正常运行,但对于需要可移植性的程序来说,这个转换操作是否是必需的?
我的结论是:是的,依据C11标准文档N1570的7.21.7.1p2条款(重点内容已标出):
如果输入流的文件结束标志未设置,且存在下一个字符,fgetc函数会将该字符作为unsigned char类型读取,再转换为int类型,同时推进流的关联文件位置指示器(如果已定义)。
内容的提问来源于stack exchange,提问作者woodenadmin
相关产品推荐
相关产品推荐

