if-abfrage in for

Gast #709109
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
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  ;)
#709133
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...
Gast #709465
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
> 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
>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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.