Forum: Mikrocontroller und Digitale Elektronik Variablenname "zusammenbasteln"


von Michael S. (rbs_phoenix)


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?

: Bearbeitet durch User
von Mladen G. (mgira)


Lesenswert?

Sowas geht nicht in statischen Sprachen wie C.

Du brauchst ein Array.

von Cyblord -. (cyblord)


Lesenswert?

In C geht das so nicht. Dafür nimmt man Arrays.

von Dr. Sommer (Gast)


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.

von Marcel (Gast)


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.

von Michael S. (rbs_phoenix)


Lesenswert?

Alles klar. Dachte ich mir schon.

Vielen Dank trotzdem

von Ulrich F. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.