としては、この質問への回答にコメントで述べている:Why gcc does not produce type mismatch warning for int and char?EOFが有効なchar値と一致するのはなぜですか?
両方-1および255は、任意の現在のCPU上の8ビットHEX番号として0xFFです。
しかし、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