Les opérateurs d'incrémentation/décrémentation de postfix sont-ils évalués après l'évaluation de l'expression ou après l'évaluation de l'ensemble de l'instruction?Évaluation de l'opérateur d'incrémentation de Postfix
#include<stdio.h>
void main()
{
int a=0;
int b=0;
printf("%d %d",a||b,b++); // Output is 1 0
}
Mon compilateur évalue les arguments printf de droite à gauche. La réponse de l'expression a || b est 1, cela signifie que b a été incrémenté avant l'évaluation d'un || b (ie b est incrémenté immédiatement après l'évaluation de l'expression b ++)
Je lis ici Incrementing in C++ - When to use x++ or ++x? que postfix incrément/décrément sont évalués après la déclaration entière.
Lequel est correct?
Aucun des deux n'est correct. Le comportement est indéfini.Voir https://stackoverflow.com/questions/949433/why-are-these-constructs-using-undefined-behavior – interjay
Alors cette réponse qui a reçu tant de remises en cause est-elle incorrecte? –
@interjay, En général, quel est le comportement si les variables ne sont pas répétées dans la même instruction? Postfix incrémente-t-il la valeur de la variable après avoir évalué l'expression ou après avoir évalué l'intégralité de l'instruction? –