编译以下代码时,它会进入无限循环:
int main()
{
unsigned char ch;
FILE *fp;
fp = fopen("abc","r");
if(fp==NULL)
{
printf("Unable to Open");
exit(1);
}
while((ch = fgetc(fp))!=EOF)
printf("%c",ch);
fclose(fp);
printf("\n",ch);
return 0;
}
gcc 编译器还会在编译时发出警告
abc.c:13:warning: comparison is always true due to limited range of data type
当unsigned char
被替换char
或int
按预期(即它终止)时,代码运行良好。
但代码也运行unsigned int
良好。正如我所读到的EOF
那样-1
,stdio.h
为什么该代码对于 unsigned char 失败但对于 unsigned int 运行良好。