n = 5
p = 2
q = n++ < p || p++ != 3
quelles seront les valeurs de n, p et q ??
Version imprimable
n = 5
p = 2
q = n++ < p || p++ != 3
quelles seront les valeurs de n, p et q ??
C'est équivalent à:
n:6Code:q = (n++ < p) || (p++ != 3);
p:3
q:1
Euh pour tes exos c'est tout seul, et si tu etais ne serait-ce qu'un peu malin tu aurai mis tout ca dans un main et fais un simple printf pour voir le résultat.Citation:
Envoyé par b4mail
Comportement indéfini. Pas de point de séquence. On ne sait pas quand se font les ++.Citation:
Envoyé par b4mail
Quand on parle de "comportement indéfini" est-ce au niveau de la compréhension humaine ou bien au niveau de la machine?Citation:
Comportement indéfini. Pas de point de séquence. On ne sait pas quand se font les ++.
Parce que ce code, quand les priorités opératoires sont définies, donne forcément un résultat défini.:roll:
je sais que c'est ca est le resultat.. mais j'avais pas ca comme resultat.. je crois que le probleme est du compilateur
merci
Il y a des opérateurs unaires (++). La notion de 'priorité' 'est insuffisante. Ce qui compte aussi, c'est l'ordre d'exécution. Ici, il n'est pas défini.Citation:
Envoyé par seriousme
Ca dépend du compilo, du système?Citation:
Ici, il n'est pas défini.
Cas typique de comportement indéfini. Le résultat ne peut pas être prédit.Citation:
Envoyé par b4mail
J'aurais dit que les 2 ++ se faisaient apres l'affectation dans q (donc apres les tests et le OU )
Du compilateur. Il fait des choix qui ne sont pas définis dans la norme. D'un compilateur à l'autre (ou d'une option d'optimisation à l'autre), le comportement peut être différent.Citation:
Envoyé par seriousme
Vu que ce n'est pas défini, on peut dire ce qu'on veut...Citation:
Envoyé par Gruik
Une normalisation n'est pas prévue?Citation:
Envoyé par Emmanuel Delahaye
La norme dit, entre les lignes, qu'il ne fait pas écrire du code pourri...Citation:
Envoyé par seriousme