bedingte kompilierung in #define



  • Hallo Zusammen,

    #define TEST_ONE 1
    #define TEST_TWO 1
    #define ONE 1
    #define TWO 2
    
    #define some_function(type)  \ 
        switch(type){\
    #ifdef TEST_ONE \  /* warum ist es nicht legitime?? */ 
            case ONE:\
                wprintf(L"this is one\n") ;\
            break; \
    #endif \
    #ifdef TEST_TWO \ 
            case TWO:\
                wprintf(L"this is two\n") ;\
            break;\
    #endif \
            default: \
                wprintf(L"nothing\n") ; \
                break; \
        }
    

    Kann ich innerhalb von #define direktive kein #ifdef verwenden?

    main.h:8:2: error: '#' is not followed by a macro parameter
    

    Danke im voraus.



  • jsbach schrieb:

    Hallo Zusammen,

    #define TEST_ONE 1
    #define TEST_TWO 1
    #define ONE 1
    #define TWO 2
    
    #define some_function(type)  \ 
        switch(type){\
    #ifdef TEST_ONE \  /* warum ist es nicht legitime?? */ 
            case ONE:\
                wprintf(L"this is one\n") ;\
            break; \
    #endif \
    #ifdef TEST_TWO \ 
            case TWO:\
                wprintf(L"this is two\n") ;\
            break;\
    #endif \
            default: \
                wprintf(L"nothing\n") ; \
                break; \
        }
    

    Kann ich innerhalb von #define direktive kein #ifdef verwenden?

    main.h:8:2: error: '#' is not followed by a macro parameter
    

    Danke im voraus.

    Du musst innerhalb Deines #define-macros kein #ifdef verwenden. Schreib das ganze anders und es funktioniert!
    Hier mal der Anfang:

    #ifdef TEST_ONE
    #ifdef TEST_TWO
    #define some_function(type)                                  \
        switch(type)                                             \
    {                                                            \
           case ONE:                                             \
                wprintf(L"this is one\n") ;                      \
                break;                                           \
            case TWO:                                            \
                wprintf(L"this is two\n") ;                      \
                break;                                           \
            default:                                             \
                wprintf(L"nothing\n")                            \
    }
    #endif 
    #endif
    

    usw. usw.

    mfg



  • egon2 schrieb:

    Du musst innerhalb Deines #define-macros kein #ifdef verwenden.

    mfg

    verstehe.. Der Witz dabei war, wenn man sich TEST_ONE und TEST_TWO
    als zur configure zeit festgelegten SIZEOFLONG_BT_SIZEOFINT und
    SIZEOFINT_BT_SIZEOFSHORT vorstellt, dann wuerde man eine Fallbehafteten
    switch-anweisung haben. Damit wird es sicher gestellt, dass es keine
    duplizierte case Werten entstehen. Wenn ich mit #ifdef versuche wo
    sizeof(int)==sizeof(long) ist, dann wird der kode nicht kompilieren(wegen
    duplizierten case Wert). Deswegen wollte ich auf der Weise loesen..


Anmelden zum Antworten