Re: Au sujet de g++

Page principale

Répondre à ce message
Auteur: Edgar Bonet
Date:  
À: Guilde Linux
Sujet: Re: Au sujet de g++
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.