Il mio codice:
#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);
}
Produzione:
CHAR_MIN=-128 CHAR_MAX=127 c=-128 ()
Vediamo che quando incrementiamo una char
variabile impostata su CHAR_MAX
, si avvolge intorno a CHAR_MIN
. Questo comportamento è garantito? O sarà un comportamento indefinito o un comportamento specificato dall'implementazione? Cosa dice lo standard C99 al riguardo?
[Nota: cosa succede quando dai un valore maggiore di CHAR_MAX (127) a char o C- perché char c = 129 verrà convertito in -127? non affronta questa domanda perché parlano dell'assegnazione di un valore fuori range e non dell'incremento di un valore su un valore fuori range.]