Grundlagen der Programmiersprache C
int a = 0, b = 0;
if (a++ && b++) { }
if (a++ || b++) { }
printf("%d %d\n", a, b);Welche Ausgabe erzeugt der obige Code, in dem b++ rechts von && und || steht, bei der Ausführung?
- A2 0
- B2 1
- C2 2
Antwort und Erläuterung anzeigen
Antwort: A. 2 0
&& wertet die rechte Seite nicht aus, wenn die linke falsch ist, und || nicht, wenn die linke wahr ist (Kurzschlussauswertung). Im ersten if ist der Wert von a++ der Wert vor dem Erhöhen, also 0 und damit falsch; b++ wird nicht ausgeführt, und nur a wird 1. Im zweiten if ist der Wert von a++ gleich 1 und damit wahr; wieder wird b++ nicht ausgeführt, und a wird 2. Steht rechts ein Ausdruck mit Nebeneffekten wie ++ oder ein Funktionsaufruf, hängt es vom Wert der linken Seite ab, ob er ausgeführt wird.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C