macros ändern funktionsnamen



  • hallo leute

    gibt es irgendeine moeglichkeit um zu verhindern das macros funktionsnamen aendern ?
    man kennt das ja z.b. von der winapi.
    da gibts die funktion FUNKNTIONSNAME und je nach dem ob UNICODE definiert ist oder nicht, wird FUNKTIONSNAMEW oder FUNKTIONSNAMEA daraus. wenn man nun selber FUNKTIONSNAME verwendet wird der name unter umstaenden auch geaendert.
    ich denk mal nicht das es da ne moeglichkeit gibt, aber die hoffnung stirbt bekanntlich zuletzt.

    Meep Meep



  • #undef


  • Mod

    Fang jetzt aber nicht an, vor alle deine Quelltexte

    #ifdef schlüsselwort
     #undef schlüsselwort
    #endif
    
    // ...
    
    #ifdef von_dir_benutzter_bezeichner
     #undef von_dir_benutzter_bezeichner
    #endif
    
    // ...
    

    zu schreiben. Wenn dir irgendeine Bibliothek Namenskonflikte mit Makros verursacht, dann:
    -Wenn es ein dokumentiertes und sinnvolles Schema der Makronamen gibt, dann vermeide diese.
    -Ansonsten überleg einen Wechsel auf eine andere Bibliothek, diese scheint nicht so gut zu sein.

    Verteidige deinen Code nicht gegen irgendwelche eingebildeten Gefahren.



  • Nur wenn's unbedingt nötig ist ...

    #include <windows.h>
    
    //
    // winapicpp.h
    //
    
    #ifdef WINAPI
    #   ifdef _UNICODE
    #       define WINAPI_NAME_(n) n##W
    #   else
    #       define WINAPI_NAME_(n) n##A
    #   endif
    
        namespace { // local namespace
    
    #   undef MessageBox
    
        inline int MessageBox(HWND h,LPCTSTR m,LPCTSTR c,UINT t)
        {
            return WINAPI_NAME_(MessageBox)(h,m,c,t);
        }
    
        } // local namespace
    #endif // WINAPI
    
    //
    // demo.cpp
    //
    
    void MessageBox()
    {
        MessageBox(0,"Hello World!","demo.cpp",MB_OK);
    }
    
    int WINAPI WinMain( HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nCmdShow)
    {
        MessageBox();
    
        return 0;
    }
    

    - osdt


Anmelden zum Antworten