Frage zur Verwendung von # in macros



  • Hallo, ich habe mal eine Frage zu einer bestimmten Art von macros.
    Nehmen wir an, ich wollte in einem Macro eine Variable erstellen, die initialisieren und später noch verwenden. Ungefähr so:

    #define CREATE_AND_INIT_MY_VARIABLE(Name, low, high) \
        unsigned int #Name = (unsigned int)high<<16|low
    
    //...
    
    int main()
    {
        short one, two;
        CREATE_AND_INIT_MY_VARIABLE(test, one, two); //erstelle die variable
        test += 1; //mache etwas mit der variable
    }
    

    Dabei bekomme ich aber eine Fehlermeldung

    Line 9 error: expected unqualified-id before string constant
    

    Abgesehen davon, dass das Konstrukt nicht unbedingt Sinn macht: Ist soetwas über macros möglich?



  • Mittels # in einem Makro sorgst du dafür, daß automatisch Anführungszeichen um den Makroparameter gesetzt werden, d.h. dein Aufruf sieht der Compiler dann so:

    unsigned int "Name" = (unsigned int)high<<16|low
    

    Richtig ist es einfach ohne das #:

    #define CREATE_AND_INIT_MY_VARIABLE(Name, low, high) \
        unsigned int Name = (unsigned int)high<<16|low
    

    In deinem Code würde ich jedoch einfach nur für die eigentliche Funktion das Makro schreiben, d.h.

    #define MAKE_WORD(low, high) ((high)<<16|(low))
    

    Beachte die Klammern wegen Operatorprioritäten!!!


Anmelden zum Antworten