Bonjour,
J'ai croisé un code à tester assez bizarre dont voici l'exemple:
Dans le Cas A (100, actuellement en commentaire), si X est une valeur entre -100 et -1, Y retournera 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <stdlib.h> #include <stdint.h> #include <stdio.h> #include <stdbool.h> #include <string.h> #include <errno.h> int main() int16_t X= 0; bool Y= 1; X = -99; /*commandeGisement verification */ // if ((X > 100)) // Cas A if ((X > 100u)) //Cas B { Y = 0; } printf(" l=%i\n cg = %i\n",Y, X); return 0; }
Dans le Cas B (100u, non commenté), si X est une valeur entre -100 et -1, Y retournera 0
Pourtant, 100u et 100 ont la même valeur, donc X restera toujours inférieur à cette valeur.
Est-ce que le compilateur, quand il rencontre le cas de figure B, met X en uint16 et non pas en int16? dans ce cas, pour le cas -99, pourquoi cela ne reste t-il pas à 1?
Quelque sait-il comment cela se déroule?
Partager