Mój kod:
#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);
}
Wynik:
CHAR_MIN=-128 CHAR_MAX=127 c=-128 ()
Widzimy, że kiedy zwiększamy char
zestaw zmiennych do CHAR_MAX
, zawija się ono do CHAR_MIN
. Czy to zachowanie jest gwarantowane? A może będzie to zachowanie niezdefiniowane lub określone w implementacji? Co na ten temat mówi standard C99?
[Uwaga: Co się stanie, jeśli wartość char niż CAR_MAX (127) będzie większa od C lub C - dlaczego char c = 129 zamieni się na -127? nie rozwiązuje tego pytania, ponieważ mówią o przypisywaniu wartości spoza zakresu, a nie zwiększaniu wartości do wartości spoza zakresu.]