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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren