#define mit variable
-
Hallo an alle,
Folgendes, ich habe zur Zeit:
PORTB.PB1 ist für ein controller, der compiler erkennt das.#define T1 PORTB.PB1 #define T2 PORTB.PB2 #define T3 PORTB.PB3 ...
in einer Funktion der ich eine Zahl übergebe:
void test(int zahl){ //egal ob int oder string switch (zahl) { case 1: T1=0; break; case 2: T2=0; break; case 3: T3=0; break; ... } }
Das finde ich leider gar nicht schön. Lieber würde ich es mir so vorstellen:
void test(int zahl){ T.zahl = 0; //irgendwie sowas in der Art. }
Wisst ihr wie ich das meine ? Quasi ne Art Platzhalter/namespace..
Gibt es eine simple Möglichkeit dafür, von der ich noch nichts weiß ?
Vielen dank
-
Der Präprozessor kann nichts zur Laufzeit auswerten. Der Präprozessor läuft sogar noch vor dem Compiler. Es wäre zwar möglich, ein Makro
T(x)
zu schreiben, das zuTx
ausgewertet wird:#define T(x) T##x
Aber das funktioniert nur dann, wenn man wortwörtlich im Quellcode
T(1)
,T(2)
, oderT(3)
stehen hat. DennT(zahl)
würde mitTzahl
ersetzt, was es hier nicht gibt.
-
Das hängt auch etwas von (dem hochgeheimen) Controller ab.
Schau dir mal an, wie
PORTB.PB1
definiert ist.
-
Oh stimmt, habe ganz vergessen dass das ja schon vor dem Compilieren verarbeitet wird und nicht zur Laufzeit..Hm okay dann habe ich wohl keine Wahl.
Es geht um ein Pic. Und ja die Register sehen anders aus, wollte es jetzt hier ganz schlicht und einfach halten