1

En fait c'est tout simple, je sais qu'avec mon compilateur habituel les "expressions" correspondants à des arguments de fonction sont calculées dans le sens contraire, mais j'aimerais savoir si dans le standard (C et C++) il y a quelque chose d'écrit à ce sujet. C'est bien dépendant du système/OS/compilateur non?

Un exemple simple...
pile p;
p.push(1);
p.push(2);
p.push(3);
printf("%d - %d - %d", p.pop(), p.pop(), p.pop());

(en considérant que pop renvoie l'élement sur la pile, puis l'enlève)
avatar
;)

2

En C comme en C++ : comportement non défini.
So much code to write, so little time.

3

Merci.
avatar
;)

4

légère nuance : comportement non spécifié si ce sont des fonctions (i.e. tout va bien marcher, sauf que tu ne sais pas quel va être l'ordre d'exécution), comportement non défini si ce sont des macros qui modifient une même variable (i.e. là ça peut foirer méchamment, la pile peut ne pas être vide à la fin, ça peut planter...)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

ok smile
So much code to write, so little time.

6

En fait j'avais quand même un peu cherché mais je vois pas à quelle partie de cette liste de "implementatio-defined behaviour" ça correspond... http://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/C-Implementation.html#C%20Implementation
avatar
;)

7

Ah non, c'est pas la même chose : "implementation-defined behavior" = ce qui peut varier suivant les plateformes, mais qui sur une plateforme donnée a un sens bien précis et bien défini; plus faible, tu as "unspecified behavior" = ce qui peut varier, mais qui ne doit pas affecter le reste des comportements (donc, en général, ce sera juste une alternative entre deux comportements différents); plus faible, tu as "undefined behavior" = ce qui ne doit pas arriver, et le compilateur peut toujours supposer que ça n'arrive jamais (et si ça arrive, faire ce qu'il veut).

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)