Macros ...



  • moin meisters ...

    habe folgende Definierungen, welche in jeder Header Datei wiederholt werden

    #ifdef _WIN32_WCE 
        #define END ;
    #endif
    #ifdef _PALMOS 
        #ifdef SECTION  
            #undef SECTION 
        #endif 
        #ifndef SECTION  
            #define SECTION __attribute__ ((section ("seg1"))) 
        #endif 
        #ifdef SECTION 
        #undef END 
        #define END SECTION; 
        #endif
    #endif
    

    Ziel ist es nur für Win_CE statt
    func(); -> func() END zu schreiben
    und auch für PalmOS statt
    func() __attribute__ ((section ("seg1"))) -> func() END schreiben zu können

    so wie es ist funktioniert es auch, nur wäre es mir lieber in jeder Datei folgende Zeile schreiben zu können

    SET_SECTION("seg1")

    mir fehlt also
    #define SET_SECTION (x) ?????? hier wie weiter ???????????
    oder auch wenn es sein muß
    #define SET_SECTION (osWin, osPalm, x)

    Besten Dank im Voraus
    mfg
    RB



  • mir fällt zB folgendes ein:

    #include <stdio.h>
    
    #define STR "Dies ist eine Message"
    #define PRINT_MSG(msg) STR ": " msg
    
    int main()
    {
      puts(PRINT_MSG("hallo"));
    
      #undef STR
      #define STR "Dies ist eine andere Message"
    
      puts(PRINT_MSG("welt"));
    
      return 0;
    }
    


  • moin meister ...

    jo, einfallen tut mir auch was wenn der Tag lang ist 🤡 nur dachte und probierte ich, schon sowas in der Art.

    #define MACRO (x) \
        #ifdef _PALMOS \
            #define SECTION (x)\
        #endif \
    

    aber in der 2.Zeile kam schon der Fehler, kann jetzt leider nicht probieren
    und Meldung habe ich nicht mehr im 😮 , jedenfalls war was mit dem Parameter.
    Problem war/ist also die Definition über mehrere Zeilen mit Parameter.

    Nun ja wen nicht ist, mach ichs halt anders, aber wäre wohl die eleganteste Lösung (s.o.) ...

    Danke schon mal

    mfg
    RB



  • Der Präprozessor kann #defines in #defines nicht auflösen...

    #define foo #define bla "x"

    ist somit ein syntax fehler.

    nimm meine Variante.

    statt
    SET_SECTION("foo")

    musst du halt
    #define SECTION "foo"
    ...
    #undef SECTION

    schreiben.
    das ist IMHO nicht so schlimm (solche präprozessor sachen müssen 'dirty' sein - sonst fühlt es sich nicht wie C an :p)



  • moin meister ...

    ja danke Dir, Du hast Recht, was ich bis heuer nicht wußte, habe ich denn doch
    noch irgendwo inner Doku gefunden, das "#" und "##" werden ja in Zusammenhang mit Parametern in der Definition verwendet, wonach #ifdef innerhalb einer Definition nicht funktionieren kann ...

    mfg
    RB


Anmelden zum Antworten