Je ne comprends pas la sortie du programme suivant:Veuillez expliquer un conflit apparent entre la préséance de && et || et le résultat réel d'une expression
#include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i || ++j && ++k;
printf("%d %d %d %d\n", i, j, k, m);
return 0;
}
La sortie est -2 2 0 1
au lieu de -2 3 1 1
, ce qui implique que ++i
a été évaluée (et a causé l'opérateur ||
à court circuit son côté droit) avant l'expression ++j && ++k
qui semble contredire le fait que l'opérateur &&
a une priorité supérieure à ||
.
Est-ce que quelqu'un pourrait expliquer pourquoi?
Quel est le type de m? –
m est de type entier Je sais que le anwer ... J'ai besoin explaination pourquoi k = 0 – anurag
'' j' et K' ne sont jamais incrémenté parce que cette partie de l'expression est court-circuitée. '++ i' est vrai, donc le reste de l'expression n'est pas évalué. –