#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


  • Mod

    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 zu Tx ausgewertet wird:

    #define T(x) T##x
    

    Aber das funktioniert nur dann, wenn man wortwörtlich im Quellcode T(1) , T(2) , oder T(3) stehen hat. Denn T(zahl) würde mit Tzahl 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 😉


Anmelden zum Antworten