Basis van programmeren in C
int a = 0, b = 0;
if (a++ && b++) { }
if (a++ || b++) { }
printf("%d %d\n", a, b);Wat is de uitvoer als de bovenstaande code, met b++ aan de rechterkant van && en ||, wordt uitgevoerd?
- A2 0
- B2 1
- C2 2
Antwoord en toelichting tonen
Antwoord: A. 2 0
&& evalueert de rechterkant niet als de linkerkant onwaar is, en || niet als de linkerkant waar is (kortsluitevaluatie). In de eerste if is de waarde van a++ de waarde van vóór de verhoging, 0, wat onwaar is, dus b++ wordt niet uitgevoerd en alleen a wordt 1. In de tweede if is de waarde van a++ 1, wat waar is, dus wordt b++ opnieuw niet uitgevoerd en wordt a 2. Let erop dat als de rechterkant een expressie met neveneffecten bevat, zoals ++ of een functieaanroep, het van de waarde van de linkerkant afhangt of die wordt uitgevoerd.