正如評論回答這個問題時說:Why gcc does not produce type mismatch warning for int and char?爲什麼EOF與有效的char值一致?
均爲-1和255 0xFF的任何當前CPU的8位十六進制數。
但EOF等於-1。這是一個矛盾,因爲EOF的值不能與任何有效的8位字符重合。這個例子演示它:
#include <stdio.h>
int main(void)
{
char c = 255;
if (c == EOF) printf("oops\n");
return 0;
}
在我的機器上它打印oops
。
這個矛盾如何解釋?
'EOF'不是一個字符,而是一個狀態。將它與'char'比較沒有任何意義。 – alk
提示:嘗試'unsigned char'。 –
「* EOF的值不能與任何有效的8位字符重合。*」爲什麼不?仔細想想。 – alk