bonjours ,
j'aimerais savoir quelle instruction est teste la premiere dans ce code .
est ce que sa s'execute par ordre ? ou c'est aleatoire ?Code:
1
2
3
4 if ( a==2 && b==3 || c==4 ){ //execution du code }
MErci et bonne apres midi :D
Version imprimable
bonjours ,
j'aimerais savoir quelle instruction est teste la premiere dans ce code .
est ce que sa s'execute par ordre ? ou c'est aleatoire ?Code:
1
2
3
4 if ( a==2 && b==3 || c==4 ){ //execution du code }
MErci et bonne apres midi :D
La norme rend obligatoire de tester de gauche à droite, et même de ne pas tester plus une fois le résultat du test "connu".
Cela permet de faire par exemple:
Avec ce code, il est garanti que si pa est nul, le test sera déclaré faux et la seconde condition ne sera même pas testée.Code:
1
2
3
4
5 void UneFonction(int *pa) { if(pa!=NULL && *pa > 0) printf("%d\n", *pa); }
Bien sûr, il faut prendre en compte les priorités:
Ton test est donc:
ce qui équivaut en fait à ça:Code:if( (a==2 && b==3) || c==4 )
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 if( a != 2 ) goto and1_non; if( b != 3 ) goto and1_non; and1_oui: goto or2_oui; and1_non: if( c == 4 ) goto or2_oui; goto or2_non; or2_oui: //Execution du code or2_non:
merci medinoc je me disais aussi que y'avais un ordre et tu a confirme avec un bon exemple , sujet resolu .;)
il faut quand meme distinguer le cas du OU et du ET, surtout que dans son exemple il y a les deux mélangés.
Avec un ET, effectivement si la premiere condition est fausse la deuxieme n'est pas évaluée
Avec un OU, si la premiere est vraie, la deuxième n'est pas évaluée.
Avec un enchainement ET OU je ne sais pas, est ce qu'il y a une priorité du ET par rapport au OU ?
Le ET est prioritaire sur le OU en algèbre de Boole (le ET correspond à une multiplication, le OU à une addition).
Oui, c'est ce que je sous-entends. Le C s'y conforme.
mais enfin, une bonne pratique, afin d'éviter tout malentendu et de rendre le code parfaitement lisible (et compilable sans warning), est de bien mettre les parenthèses....
:D