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..