Hallo,
Ich habe ein "kleines" Problem bei der Erstellung eines Macros in ANSI C
es gibt ja die Möglichkeit mittels "stringizing" den Wert eines #define
als String zurück zu liefern.
1 | #define STR_HELPER(x) #x
|
2 | #define STR(x) STR_HELPER(x)
|
Nun habe ich aber eine #define welches nicht direkt einen Zahlenwert
beinhaltet sondern auf ein anderes #define zurückgreift (bsp. siehe
unten).
gibt es die Möglichkeit zunächst den Wert "berechnen" zu lassen und dann
ausgeben zu lassen?
1 | #define VAR_A 34 // 0x22
|
2 | #define VAR_B VAR_A
|
3 | #define VAR_C (VAR_A)
|
4 | #define VAR_D (VAR_A&0x0F)
|
5 |
|
6 | STR(VAR_A) // -> "34"
|
7 | STR(VAR_B) // -> "34"
|
8 | STR(VAR_C) // -> "(34)"
|
9 | STR(VAR_D) // -> "(VAR_A&0x0F)"
|
10 |
|
11 | #if (VAR_D == 2)
|
12 | #define VAR_D_STATE "D true"
|
13 | #else
|
14 | #define VAR_D_STATE "D false"
|
15 | #endif
|
16 | // VAR_D_STATE -> "D true"
|
Wie an der Abfrage zu sehen ist, ist der "richtige" Wert bzw. Berechnung
in VAR_D enthalten.
Die Frage ist nun, habe ich irgend eine Möglichkeit diesen Wert als
String zu bekommen?
Mittlerweile bin ich fast so weit folgendes zu schreiben
1 | #if (VAR_D == 0)
|
2 | #define VAR_D_S "0"
|
3 | #elif (VAR_D == 1)
|
4 | #define VAR_D_S "1"
|
5 | .
|
6 | .
|
7 | .
|
8 | #elif (VAR_D == 99)
|
9 | #define VAR_D_S "99"
|
Aber es muss doch eine elegantere Methode geben, oder?
PS.: ich weiß im obigen Beispiel geht VAR_D nur bis 0x0F und nicht bis
99, allerdings dient die Variable auch nur der Veranschaulichung.
Vielen Dank im voraus