Variablenname "zusammenbasteln"

OP #3510061
Lesenswert?
• ▲
▼
Hallo zusammen. Ich habe da mal eine Frage bzgl. C, die ich mit einem 
Beispiel verdeutlichen will.

Ein uC hat 10 LEDs als Ausgänge angeschlossen. Eine Zahl (mittels UART 
empfangen) soll bestimmen, welche LED ihren Zustand wechseln soll. Also 
kommt die Zahl 0 soll die LED0 von An auf Aus bzw. von Aus auf An gehen. 
In C würde ich also schreiben:
1
switch(empfangenesByte){
2
case '0': LED0 = ~LED0;
3
                 break;
4
....
5
}

In PHP gibt es die Möglichkeit den Variablennamen mittels eines Strings 
zu bestimmen. Dort ginge es so:
1
$varName = "LED" . $empfangenesByte;
2
$$varName ~= $$varName;

In PHP wird eine normale Variable mit einem $ geschrieben. Mit $$varName 
wird der Inhalt von $varName benutzt, um den eigentlichen Variablennamen 
zu erzeugen.
Es ist nicht nur kürzer, sondern auch geschwindigkeitstechnisch 
konstant.

Gibt es so eine Möglichkeit der Variablennamenbestimmung auch in C? Oder 
kann man diese Aufgabe eleganter als mit einem switch-case lösen?
Gast #3510091
Lesenswert?
• ▲
▼
Michael Skropski schrieb:
> Es ist nicht nur kürzer, sondern auch geschwindigkeitstechnisch
> konstant.
Als ob. Das Namen zusammenbauen hat mindestens lineare Laufzeit, und der 
Lookup konstant (hashmap) oder logarithmisch (treemap); und ne Menge 
Speicher brauchts auch für den Index. In statischen Sprachen hingegen 
ist der Zugriff quasi immer eine einzige Instruktion, also um 
Größenordnungen schneller.
Gast #3510221
Lesenswert?
• ▲
▼
Geht per Präprozessor mit ##, sofern diesm alle Parameter bekannt sind.
1
#define LED(x)  LED ## x
LED(0) wird durch den Präprozessor mit LED0 ersetzt.


Wenn es dynamisch zur Laufzeit gemacht werden muss, ist ein Array die 
beste Lösung.
Gast #3511090
Lesenswert?
• ▲
▼
Hugo schrieb im Beitrag #3510103:
> Es schon schwierig wenn man so einen
> Murks gelernt hat, diesen wieder zu vergessen.

Selbst in PHP sind variable Variablen böse. Variablen durchnummerieren 
ist auch immer unschön, egal welche Sprache.

Oft in PHP gesehen:
Zumüllen des globalen Namensraumes mit automatisch generierten 
(durchnummerierten) Variablen. Und dann hinterher mit isset() prüfen, ob 
die ein oder andere da ist...
Gruselig.

Nicht falsch verstehen, ich mag PHP, ich arbeite viel mit PHP.
Aber die Freiheiten, welche einem eine solche Scriptsprache bietet, kann 
in denn Irrsinn führen, wenn man da nicht mit Disziplin gegen hält.

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.