non capisco l'output del seguente programma:Si prega di spiegare un conflitto apparente tra la precedenza di && e || e il risultato effettivo di un'espressione
#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;
}
L'uscita è -2 2 0 1
anziché -2 3 1 1
, implicando che ++i
stata valutata (e provocato l'operatore ||
a breve circuito sul lato destro) prima dell'espressione ++j && ++k
che sembra contraddire il fatto che l'operatore &&
ha precedenza superiore a ||
.
Qualcuno potrebbe spiegare perché?
Qual è il tipo di m? –
m è di tipo integer so che l'Anwer ... ho bisogno di spiegazione perché è k = 0 – anurag
'' j' e k' non sono mai incrementato perché quella parte dell'espressione è in corto circuito. '++ i' è vero, quindi il resto dell'espressione non viene valutato. –