Preprocessor Magie



  • Hallo,

    ich habe folgendes Problem:

    #define A val_a // für ein beliebigen Wert val_a
    #define B val_b // für ein beliebigen Wert val_b
    
    // ...
    
    #define HLPR A
    
    #undef  A
    #define A 1
    
    #undef  B
    #define B HLPR
    
    int main()
    {
      A // wird vom preprocessor aufgelöst zu 1 wie gewünscht
      B // wird vom preprocessor aufgelöst zu 1, gewünscht wäre aber val_a
    }
    

    Hat jemand eine Idee, wie ich für "B" in der "main"-Funktion val_a als Ergebnis bekomme und nicht 1?

    Danke im Voraus.



  • Ersetze HLPR durch

    static const int HLPR = A;
    

    (bzw. den entsprechenden Datentyp von A)

    s.a. http://ideone.com/jgDrk8

    PS: Ohne die Hilfsvariable/-konstante wird es nicht funktionieren, denn die Makros haben kein Gedächtnis (sie werden erst bei der Benutzung mit den gerade aktuellen Makrodefinitionen aufgelöst).



  • Verschieb

    #undef  B
    #define B HLPR
    

    hinter die main - Funktion (oder lass es weg)



  • Hallo Belli,

    B soll aber val_a liefern, nicht val_b!



  • Oh ... ja ... sorry, da hab ich ungenau hingesehen ...


Log in to reply