Wie gesagt in den Kommentaren auf die Antwort auf diese Frage: Why gcc does not produce type mismatch warning for int and char?Warum EOF mit gültigem char-Wert übereinstimmt?
beide -1 und 255 0xFF als 8-Bit-HEX-Zahl auf alle aktuellen CPU sind.
Aber EOF ist gleich -1. Dies ist ein Widerspruch, da der Wert von EOF nicht mit einem gültigen 8-Bit-Zeichen übereinstimmen darf. Dieses Beispiel demonstriert es:
#include <stdio.h>
int main(void)
{
char c = 255;
if (c == EOF) printf("oops\n");
return 0;
}
Auf meinem Computer druckt es oops
.
Wie kann dieser Widerspruch erklärt werden?
'EOF' ist kein Zeichen, sondern ein Zustand. Vergleiche es mit einem "char" macht keinen Sinn. – alk
Hinweis: Versuchen Sie 'unsigned char'. –
"* Der Wert von EOF darf nicht mit einem gültigen 8-Bit-Zeichen übereinstimmen. *" Warum nicht? Denke nochmal nach. – alk