was ist effizienter, case oder if?

Gast #76679
Lesenswert?
• ▲
▼
Peter, Du bist lange genug dabei, um hier nicht weiter zur
Begriffsverwirrung beitragen zu müssen.

Der Compiler heißt AVR-GCC.

WinAVR heißt das Windows-Paket, das ihn zusammen mit paar anderen für
den Zweck nützlichen Tools in einem gemeinsamen Installer anbietet.

Nein, typecast hilft da nicht, der Steuerausdruck eines case ist per
definitionem ein `int'.  -mint8 hilft, aber macht einen ziemlich
inkompatibel zur Standardbibliothek.
Gast #76681
Lesenswert?
• ▲
▼
Hm, ja.

Aber die Frage ist für mich noch nicht ganz beantwortet.
Hübscher oder nicht - ok, das ist eine Sache. Aber ich will keinen
Schönheitswettbewerb gewinnen. Ich möchte so ressourcenschonend wie
möglich programmieren.

Im vorliegenden Fall habe ich -leider- ca. 50 (!) Cases in einem
einzigen switch zu unterscheiden.

Und da lohnen sich ein paar Gedanken schon.

Ich überlege auch, ob es sinnvoll ist, die cases (wenn man sie den
vewendet) in sortierter Reihenfolge zu kodieren. Hab' ja keine Ahnung,
ob das dem Compiler die Denke oder das Optimieren erleichtert...

e.
Gast #76682
Lesenswert?
• ▲
▼
nagut aber meine vorredner sagten ja schon das if else wohl resourcen
schonender sein dürfte abgesehen davon kannste das doch auch
ausprobieren. was mehr speicherplatz einnimmt sieht man nachm
kompilieren und was zur laufzeit shcneller is angut da muss man schon
etwas tiefer in die trickkiste greifen. wenn man kein oszilloskop zur
hand hat müsstes auch nen timer vom avr tun timer anmachen einmal durch
den switch durch timer ausmachen wert übers uart ausgeben (oder lcd
oder sonstwas)
Gast #76683
Lesenswert?
• ▲
▼
Bei 50 möglichkeiten wär ich mir da nicht so sicher.
Du arbeitest nämlich bei if alle 50 durch unabhängig davon ob die
Lösung schon gefunden wurde.
switch hört auf wenn es die richtige Antwort gefunden hat.
Das kann bei 50 schon was bringen.
Von der rechenzeit her könnte man ja mal nen simulator testen, obwohl
ich den Dingern ned so ganz trau;)
cu Flo
Gast #76684
Lesenswert?
• ▲
▼
" Du arbeitest nämlich bei if alle 50 durch unabhängig davon ob die
Lösung schon gefunden wurde."

Nö, eigentlich nicht:

if (x == y) { blah }
else if (y == z) { blah }
else if ....

Das "else" schickt die Verarbeitung ans Ende. Denn nach dem  ersten
erfolgreichen Vergleich ist Schluss.

BIS DAHIN allerdings macht er alle Vergleiche durch. Wie ist denn das
bei "case"? Macht nicht der Compiler letztlich auch eine interne
if/else-if Struktur draus?

Ich könnte das natürlich byte für byte im Assembler studieren. Aber ich
hab' ja schon gesagt, dass Assembler nicht so mein Ding ist, ich tu
mich da schwer. Meine Hoffnung war, dass diese Frage von einigen schon
grundsätzlich durchleuchtet wurde (warum dann das Rad zwei mal
efinden?).
Gast #76686
Lesenswert?
• ▲
▼
Bei 50 Einträgen würde ich auch auf eine Sprungtabelle gehen. Wenn case
die selber macht, umso besser. Du kannst sie aber auch selber
zusammenbasteln, das Sprungziel ist in diesem Fall aber immer eine
eigene Funktion.

Weiterer Nebeneffekt: der Code wird richtig schön überschaubar.

Stefan

Antwort schreiben

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.

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.