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?
iffff schrieb: > Werden beide Anweisungen in den if-Abfragen direkt nacheinander > ausgeführt? nein. Er kommt ja gar nicht zu 2. if-Abfrage.
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:
1 | a=1; |
2 | |
3 | if(a==1) |
4 | {
|
5 | ... // aa |
6 | }
|
7 | else if(a==2) |
8 | {
|
9 | ... // bb |
10 | }
|
Frage: wird aa oder bb ausgeführt? Was ist der Trick beim entweder-oder (aka if-else)? Frage: was passiert im folgenden Code?
1 | a=1; |
2 | |
3 | if(a==1) |
4 | {
|
5 | a=2; |
6 | }
|
7 | |
8 | if(a==2) |
9 | {
|
10 | ...
|
11 | }
|
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?
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...
1 | Antwort schreiben |
2 | Wichtige Regeln - erst lesen, dann posten! |
3 | Formatierung |
4 | |
5 | [c]C-Code[/c] |
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.
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
1 | if (...) |
2 | {
|
3 | foo(); |
4 | }
|
5 | else
|
6 | {
|
7 | bar(); |
8 | }
|
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.
Ich liebe diese Board, denn
1 | if(ihavenobookaboutc){ |
2 | CallMikrocontrollerNetHelp(); |
3 | } else if (Idontknowaboutgoogle) { |
4 | CallMikrocontrollerNetHelp(); |
5 | } else if (iamatroll) { |
6 | CallMikrocontrollerNetHelp(); |
7 | } else { |
8 | CallMikrocontrollerNetHelp(); |
9 | }
|
iffff schrieb: > Frage: > Werden beide Anweisungen in den if-Abfragen direkt nacheinander > ausgeführt? Ganz klares Nein.
1 | a=1; |
2 | if (a == 1) { |
3 | a = 2; |
4 | } else if (a == 2) { |
5 | ...
|
6 | }
|
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:
1 | a=1; |
2 | if (a == 1) { |
3 | a = 2; |
4 | } else { |
5 | if (a == 2) { |
6 | ...
|
7 | }
|
8 | }
|
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:
1 | a=1; |
2 | if (a == 1) a = 2; else if (a == 2) foobar(); |
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
> Der GCC optimiert das übrigens zu CallMikrocontrollerNetHelp();
Reingefallen, ich hoffte, dass es mindestens einen gibt dem es
auffällt..
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...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.