Mein Code:
#include <stdio.h>
#include <limits.h>
int main()
{
char c = CHAR_MAX;
c += 1;
printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c);
}
Ausgabe:
CHAR_MIN=-128 CHAR_MAX=127 c=-128 ()
Wir sehen, dass, wenn wir eine char
Variable inkrementieren CHAR_MAX
, diese umbrochen wird CHAR_MIN
. Ist dieses Verhalten garantiert? Oder handelt es sich um undefiniertes oder implementierungsspezifisches Verhalten? Was sagt der C99-Standard dazu?
[Hinweis: Was passiert, wenn char oder C ein Wert größer als CHAR_MAX (127) gegeben wird - warum wird char c = 129 in -127 konvertiert? geht auf diese Frage nicht ein, weil sie über das Zuweisen eines Werts außerhalb des Bereichs sprechen, ohne einen Wert einem Wert außerhalb des Bereichs zu erhöhen.]