(Courriels de diversion: <entamerais@localiserons-avoisinerai.com> <meteorites@contrerez-demarquez.com> <rajeuniront@surmenais-portail.com> <barbet@charriee-balisera.com> <humilier@saussaies-urbaniserez.com> <creche@intimions-liquidais.com> <encriers@peseras-vertebrales.com> <etraves@desengageons-figure.com> <happions@angoisserions-ensoleilles.com> <concretement@veilliez-reimplanta.com> )


On 12/9/05, BETOUS Guillaume <guillaume.betous@c-s.fr> wrote:> > soit :
> > i=((0)*(++i));
>
> bin non justement !
>
> si tu pre incremente i, alors i vaut 1 pendant toute ton insctruction
> (le i*i)
>
> il faut deocuper ton insctruction comme ca :
> i++; /* i=1 */
> i=(i)*(i) /* i=1*1=1 */
> i++; /* i=2 */
>
> donc i=2

De toute facon, le probleme n'a pas de solution defini par la norme.
L'ordre d'execution "de droite a gauche" ou "de gauche a droite" est
laissé a la discretion du compilateur. Au meme titre que la
post-incrementation qui peut se faire juste apres l'evaluation de i ou
alors (plus logiquement) apres la fin de la sequence (indiqué par le
";").

je cite, depuis fr.comp.lang.c (a qui j'ai posé le probleme) :
"Tout ces cas sont des comportements indéfinis. Dans une telle
utilisation, on doit avoir au moins un point de séquencement. Les
arguments sont « pushés » de droite à gauche sur à ma connaissance
toutes les implémentations à base de pile, mais ca n'a rien d'imposé
par la norme, donc on ne fait pas et on met un point de séquencement.
"

En tout cas... je me suis bien fait pieger par mon propre quiz :p

--
Ker2x

--------------------------------------------------------------------
Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>