if-abfrage in for

Gast #709109
Lesenswert?

Moin!

fummel gerade in c rum und grübel über folgenden soll-zustand:
1
for(foo = 0; foo < bar; foo++)
2
{
3
   if(schroeder)
4
      // ; oder continue oder return?
5
   else if(schmitz)
6
      mach_was;
7
   else
8
      _anderes;
9
}

Beim Kommentar soll nichts geschehen. nun habe ich mal etwas von der 
anweisung continue gehört, würde die hier gehen oder reicht ;? 
hintergrund: ich möchte die anderen abfragen möglichst meiden, da 
ziemlich umfassend (schroeder-abfrage ist ziemlich simpel).
Gast #709127
Lesenswert?

warum ich da return mit aufgeführt habe ist mir ein rätsel  oO

dein 'müsste' bezieht sich wahrscheinlich darauf, dass du nicht genau 
wissen kannst was ich möchte. er soll die for-schleife incrementieren 
(iteration?). relativiert sich dein 'müsste'? leider habe ich meinen k&c 
gerade nicht hier, sonst würde ich nicht so blöd fragen  ;)
Gast #709465
Lesenswert?

Bei einer if-Anweisung mit leerem if- und gefülltem else-Zweig
negiert man die Bedingung, so dass if- und else-Zweig vertauscht
werden und letzterer damit wegfällt:
1
for(foo = 0; foo < bar; foo++)
2
{
3
   if(!schroeder)
4
     if(schmitz)
5
        mach_was;
6
     else
7
        _anderes;
8
}
Gast #709500
Lesenswert?

> nun habe ich mal etwas von der anweisung continue gehört, würde die
> hier gehen oder reicht ;?

Ein Semikolon reicht. Wie schon geschrieben wurde, kann man mit continue 
für den aktuellen Schleifendurchlauf alles übergehen, was danach noch 
kommen würde. Da aber danach eh nichts mehr kommt (der else-Zweig wird 
ja nicht ausgeführt), gibt es nichts zu übergehen.
Es ist also eher eine Stilfrage, und da würde ich eher zum continue 
raten, da es die Absicht leichter ersichtlich macht.
Gast #709502
Lesenswert?

>ich möchte die anderen abfragen möglichst meiden, da ziemlich umfassend

Versteh ich nicht. Wenn schroeder wahr ist, werden die beiden anderen 
Abfragen doch sowieso nicht ausgewertet,(so schlau ist der Compiler dann 
doch), und wenn schroeder nicht wahr ist, müssen sie behandelt werden. 
Was willst du da noch mit continue sparen?

Step den Code mal im Disassembler durch, dann siehst du, was passiert.

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren