mikrocontroller.net

Forum: Compiler & IDEs kann man switch-case mit if-then "mischen" ?


Autor: Stefan Sczekalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

geht so etwas prinzipiel:

switch ( foo )
{
   if ( Bedingung )
    {
      case A:
       .... irgendwas;
       break;
      case B:
       .... was anderes;
       break;
    }
   case C:
       ... noch was anderes;
       break;
   default:
       break;
}

die "case A bzw. case B" sollen nur bewertet werden wenn die
Bedingung  hinter dem if zutrifft.

ich habs zwar gerade mal ausprobiert, der Compiler hat auch nicht
gemeckert, das was passieren sollte ist aber auch nicht passiert.
deswegen bin ich mir nun etwas unsicher ...

Grüße,
    Stefan

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gucke dir mal "Duff's device" an und frage dich dann, ob du
derartigen Code wirklich haben willst. ;-)

Ja, mischen kann man das, aber das wird write-only code.

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei Duff den code zwischen die cases schreibt, und nicht anders herum.
Der oben beschriebene code wird die if Abfrage wohl nie ausfuehren. Im
Prinzip stellen die cases unter der Decke goto statements dar, und das
kann man, wie Joerg beschreibt, fuer uebelste Spielchen benutzen.

Joerg, die Formulierung 'write-only code' muss ich mir merken.
Gnihihi.

Autor: Stefan Sczekalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... an das Duff's device erinnere ich mich.

naja, ok, ich muss es so nicht machen, es wäre jedoch an der Stelle
"relativ" elegant gewesen.

leider passiert genau das was TheDaz schreibt.

Der Kernigham hatte dazu nichts verlautbahrt. Da dachte ich mir - ich
frag mal jemanden der sich damit auskennt.

Das Kapitel "Write-Only-Code" Versuche ich durch reichlich Komentare
zu vermeiden - sonst weis ich ja hinterher selbst nicht mehr was und
warum ich da gemacht habe.

Grüße,
Stefan

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Im Prinzip stellen die cases ... goto statements dar"

Jau, genau so isses !

Man kann also alles das machen, was mit goto möglich wäre.

Und da vor dem if kein case (label) steht, wird es also nie ausgeführt.
Der Compiler wird das if also einfach wegoptimieren, da toter Code.

Und default muß auch nicht am Ende stehen.


Peter

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.