Forum: Compiler & IDEs if-abfrage in for


von schroeder (Gast)


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).

von Johannes M. (johnny-m)


Lesenswert?

Da es sich nicht um eine Funktion handelt, sondern nur um eine Schleife, 
scheidet return sowieso aus. continue müsste aber das machen, was Du 
vorhast.

von schroeder (Gast)


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  ;)

von Daniel N. (Gast)


Lesenswert?

Ja, continue müsste das machen was du vorhast.
Es springt an den Anfang der Schleife.

von Johannes M. (johnny-m)


Lesenswert?

continue sorgt dafür, dass alles, was im aktuellen Schleifendurchlauf 
noch gemacht werden müsste, abgebrochen und der nächste Durchlauf 
eingeleitet wird. Da das nach meinem Verständnis das ist, was passieren 
soll: Ja, das "müsste" kann in ein "wird" umgewandelt werden...

von schroeder (Gast)


Lesenswert?

na prima bello, besser als nen k&c! ich hab jetzt nen M&N....  ;)  danke 
jungs

von Johannes M. (johnny-m)


Lesenswert?

> besser als nen k&c!
Meinste vielleicht nen "K&R"? Wäre sinnvoller...

von schroeder (Gast)


Lesenswert?

hast recht! ist ne lange geschichte...

von yalu (Gast)


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
}

von Rolf Magnus (Gast)


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.

von Oliver (Gast)


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

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
Noch kein Account? Hier anmelden.