noid
2009-09-22, 12:26:30
Hallo,
ich habe hier eine etwas unglückliche Lage, 2 Codeteile benutzen macros, die ich nicht ändern kann - aber einbauen muss.
Jetzt folgender Beispielcode:
/*****************************************************
*
* Macro_Test.c
*
* Description : Hello World in C, Ansi-style
*
*/
#include <stdio.h>
//... diese structs gibt es in verschd Ausführungen, automatisch generiert:
typedef struct
{
unsigned int APP_01_DataValue_1;
unsigned int APP_01_DataValue_2;
int APP_unused_1_[4];
} APP1DebugStruct;
//hier das Problem, kommt eigentlich aus einer anderen Header Datei:
#define DATA_PACKAGE1 1
#define DATA_PACKAGE2 2
//hier kommt das Übel, habe es bewusst so verkürzt, da nur die ## "stören":
#define PUSH_DEBUG_DATA(a, b, c, d) \
{ \
((a ## b ## DebugStruct*)test)->c = d \
}
int main(void)
{
APP1DebugStruct*test, a;
int value = 3
test = &a;
PUSH_DEBUG_DATA(APP, DATA_PACKAGE1, APP_01_DataValue_1, value);
PUSH_DEBUG_DATA(APP, DATA_PACKAGE1, APP_01_DataValue_2, (++value));
printf( "Hello world\n" );
}
Das bereitet aber ein Problem: das DATA_PACKAGE1 wird von dem Makro als Zeichenkette behandelt, APPDATA_PACKAGE1DebugStruct gibt es aber nicht.
Jetzt kommt mir gerade beim Tippen die Idee über ein enum ... mal ausprobieren. Jemand sonst noch ne Idee?
ich habe hier eine etwas unglückliche Lage, 2 Codeteile benutzen macros, die ich nicht ändern kann - aber einbauen muss.
Jetzt folgender Beispielcode:
/*****************************************************
*
* Macro_Test.c
*
* Description : Hello World in C, Ansi-style
*
*/
#include <stdio.h>
//... diese structs gibt es in verschd Ausführungen, automatisch generiert:
typedef struct
{
unsigned int APP_01_DataValue_1;
unsigned int APP_01_DataValue_2;
int APP_unused_1_[4];
} APP1DebugStruct;
//hier das Problem, kommt eigentlich aus einer anderen Header Datei:
#define DATA_PACKAGE1 1
#define DATA_PACKAGE2 2
//hier kommt das Übel, habe es bewusst so verkürzt, da nur die ## "stören":
#define PUSH_DEBUG_DATA(a, b, c, d) \
{ \
((a ## b ## DebugStruct*)test)->c = d \
}
int main(void)
{
APP1DebugStruct*test, a;
int value = 3
test = &a;
PUSH_DEBUG_DATA(APP, DATA_PACKAGE1, APP_01_DataValue_1, value);
PUSH_DEBUG_DATA(APP, DATA_PACKAGE1, APP_01_DataValue_2, (++value));
printf( "Hello world\n" );
}
Das bereitet aber ein Problem: das DATA_PACKAGE1 wird von dem Makro als Zeichenkette behandelt, APPDATA_PACKAGE1DebugStruct gibt es aber nicht.
Jetzt kommt mir gerade beim Tippen die Idee über ein enum ... mal ausprobieren. Jemand sonst noch ne Idee?