c - Fejlfinding af makrodefinition i tværplatformsprojekt

Indlæg af Hanne Mølgaard Plasc

Problem



I vores cross-platform c-projekt bruger vi makroen til logning formål:


#if \_WINDOWS
    #define DEBUG\_PRINTF(x) KdPrint(x)
#endif


Brugseksemplet DEBUG\_PRINTF:


DEBUG\_PRINTF(("Message with param (\%s)
", pString)); //            (1)
DEBUG\_PRINTF(("Message with no param
")); //                       (2)


Det er ok. Ifølge KdPrint-funktionsreferencen kræver et opkald til KdPrint dobbelt parenteser: [12]


KdPrint (( Format, arguments ))
KdPrintEx (( DPFLTR\_DEFAULT\_ID, DPFLTR\_INFO\_LEVEL, Format, arguments ))


Mit spørgsmål er hvordan man skal håndtere allerede eksisterende makroer som (1) og (2) ved at porte DEBUG\_PRINTF på en anden platform som Linux i userspace ?


For eksempel definitionen


#if defined (\_\_LINUX\_\_)
    #define DEBUG\_PRINTF((x)) fprintf(stderr, x)
#endif


Kompilerer ikke for makroer som (1).

Bedste reference


Jeg ville gøre det omvendt:


#if \_WINDOWS
    #define DEBUG\_PRINTF(x) KdPrint((x))
#else
    #define DEBUG\_PRINTF(format, ...) fprintf(stderr, format, ##\_\_VA\_ARGS\_\_)
#endif


Anvendelse:


DEBUG\_PRINTF("Message with param (\%s)
", pString);