mikrocontroller.net

Forum: Compiler & IDEs if-abfrage in for


Autor: schroeder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!

fummel gerade in c rum und grübel über folgenden soll-zustand:

for(foo = 0; foo < bar; foo++)
{
   if(schroeder)
      // ; oder continue oder return?
   else if(schmitz)
      mach_was;
   else
      _anderes;
}


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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: schroeder (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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  ;)

Autor: Daniel N. (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: schroeder (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: schroeder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast recht! ist ne lange geschichte...

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
for(foo = 0; foo < bar; foo++)
{
   if(!schroeder)
     if(schmitz)
        mach_was;
     else
        _anderes;
}

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.