Gast
#4101592
Hallo, folgender Code:
a=1;
if(a==1)
{
a=2;
}
else if(a==2)
{
...
}
Frage:
Werden beide Anweisungen in den if-Abfragen direkt nacheinander
ausgeführt?
|
Anzeige
|
if abfrage durchfallen
Gast
#4101592
Hallo, folgender Code:
a=1;
if(a==1)
{
a=2;
}
else if(a==2)
{
...
}
Frage:
Werden beide Anweisungen in den if-Abfragen direkt nacheinander
ausgeführt?
Was macht denn dein Compiler?
Gast
#4101594
iffff schrieb: > Werden beide Anweisungen in den if-Abfragen direkt nacheinander > ausgeführt? nein. Er kommt ja gar nicht zu 2. if-Abfrage.
Gast
#4101598
a ist nur initial bei 1 Und? Der /else/-Zweig wird dennoch nicht durchlaufen, weil die erste Abfrage nicht wiederholt wird. iffff schrieb: > Frage: Werden beide Anweisungen in den if-Abfragen direkt nacheinander > ausgeführt? Sieh dir mal diesen Code an:
Frage: wird aa oder bb ausgeführt? Was ist der Trick beim entweder-oder (aka if-else)? Frage: was passiert im folgenden Code?
iffff schrieb: > a ist nur initial bei 1 Es wird jedesmal vor der ersten if-Abfrage wieder mit 1 beschrieben... Oder ist der gepostete Code noch nicht komplett?
Gast
#4101606
a=1;
while(1)
{
if(a==1)
{
a=2;
}
else if(a==2)
{
...
}
}
Wird der zweite if Zweig beim ersten, oder erst beim zweiten Durchlauf
durch die Schleife abgearbeitet?
normalerweise iffff schrieb: > beim zweiten Durchlauf wenn Dennis S. schrieb: > Was macht denn dein Compiler? der es richtig macht, wovon ich ausgehe...... BTW: mach bitte um deinen Code die c-Tokens. Die Anleitung findet sich knapp über der Edit-Box...
Gast
#4101616
iffff schrieb: > Wird der zweite if Zweig beim ersten, oder erst beim zweiten Durchlauf > durch die Schleife abgearbeitet? Was das "else" wohl bedeuten mag.....? Ich verrate es dir: "sonst" Siehe z.B.: https://www.dict.cc/?s=else Es heißt: Wenn jenes, dann Tue dieses sonst tue was anderes. Und nicht: Wenn jenes, dann Tue dieses und tue was anderes.
Gast
#4101624
Bei diesem code wird nur die erste if abgearbeitet
a=1;
if(a==1)
{
a=2;
}
else if(a==2)
{
...
}
Bei diesem code werden beide if's abgearbeitet
a=1;
if(a==1)
{
a=2;
}
if(a==2)
{
...
}
Bei einem if/else Block a'la
wird immer genau einer der beiden Teile (also entweder foo() oder bar()) durchlaufen. Ob jetzt in dem else Block nochmal ein weiteres if drinsteht, spielt dafür keine Rolle.
Gast
#4101742
Ich liebe diese Board, denn
Der GCC optimiert das übrigens zu
;-) iffff schrieb: > Frage: > Werden beide Anweisungen in den if-Abfragen direkt nacheinander > ausgeführt? Ganz klares Nein.
Formal müsste man es so schreiben, und da sieht man auch sofort, das man nie zum zweiten if kommt, da der else-zweig niemals ausgeführt wird:
Da aber das if bereits einen Block kapselt, wird in der Regel die geschweifte Klammer bei einem else-if weggelassen. In C kann man die geschweiften Klammern weglassen, wenn der Block nur einen Befehl umfasst:
Ich persönlich finde es furchtbar wenn jemand bei if/else Blöcken die Klammern weglasst. Auch wenn der Code korrekt eingerückt ist, ist er meiner Meinung mit Klammern besser zu lesen. Nur bei einem else-if sollte man sie weglassen. Yalu X. schrieb: > Der GCC optimiert das übrigens zu > CallMikrocontrollerNetHelp(); > > ;-) Aber nur wenn: #ifdef ICanUseBrain TryWithSimulator(); #else CallMikrocontrollerNetHelp(); #endif
Gast
#4101802
> Der GCC optimiert das übrigens zu CallMikrocontrollerNetHelp();
Reingefallen, ich hoffte, dass es mindestens einen gibt dem es
auffällt..
Gast
#4101812
Lieber Threadersteller, bitte nicht böse sein, aber wenn man sich mit Programmierung auseinandersetzt, sollte man auch eine Entwicklungsoberfläche installieren. Einmal durch den Code im Single-Step hilft für das Verständnis. Fahradfahren lernt man auch nicht durch reine Theorie... Antwort schreiben |
Anzeige
|