Mon 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);
}
Production:
CHAR_MIN=-128 CHAR_MAX=127 c=-128 ()
Nous voyons que lorsque nous incrémentons un char
ensemble de variables à CHAR_MAX
, il s'enroule autour de CHAR_MIN
. Ce comportement est-il garanti? Ou est-ce que ce sera un comportement non défini ou un comportement spécifié par l'implémentation? Que dit la norme C99 à ce sujet?
[Remarque: que se passe-t-il lorsque vous donnez une valeur supérieure à CHAR_MAX (127) à char ou C- pourquoi char c = 129 se convertira en -127? ne répond pas à cette question car ils parlent d'assigner une valeur hors plage et non d'incrémenter une valeur à une valeur hors plage.]