Le Tuesday 20 November, Patrick Begou a écrit :
> printf("%d %d %d\n", a, a+=1, a);
> [...]
> En C++, selon le standart de 1998, seul l'operateur = est evalue de la
> droite vers la gauche
> et l'operateur ',' devrait garantir une evaluation sequentielle, de la
> gauche vers la droite, des expressions qu'il separe. Pas triste!
Je ne connais pas le C++, mais si c'est comme le C, il n'y a pas
d'opérateur virgule dans l'expression que tu donnes comme exemple. Les
virgules dans le printf sont des séparateurs qui délimitent les
arguments. Ce ne sont pas des opérateurs. En C l'ordre d'évaluation des
arguments d'une fonction n'est pas garanti.
Un exemple avec des opérateurs virgule :
#include <stdio.h>
int main (void)
{
int a = 0;
printf("1 "), printf("2 "), printf("3 ");
printf("%d\n", (a, a+=1, a));
return 0;
}
Avec ça, aussi bien gcc que g++ donnent 1 2 3 1. Dont l'évaluation se
fait bien de gauche à droite avec l'opérateur virgule.
Edgar.