user663896
user663896

Reputation:

Debugging macro definition in cross-platform project

In our cross-platform c-project we are using the macro for the logging purposes:

#if _WINDOWS
    #define DEBUG_PRINTF(x) KdPrint(x)
#endif

The DEBUG_PRINTF usage example:

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

It is ok. According to the KdPrint function reference a call to KdPrint requires double parentheses:

KdPrint (( Format, arguments ))
KdPrintEx (( DPFLTR_DEFAULT_ID, DPFLTR_INFO_LEVEL, Format, arguments ))

My question is how to deal with already existed macros such as (1) and (2) by porting the DEBUG_PRINTF on other platform such as linux in userspace?

For example the definition

#if defined (__LINUX__)
    #define DEBUG_PRINTF((x)) fprintf(stderr, x)
#endif

does not compile for macros such as (1).

Upvotes: 0

Views: 233

Answers (1)

orlp
orlp

Reputation: 117771

I would do it the other way around:

#if _WINDOWS
    #define DEBUG_PRINTF(x) KdPrint((x))
#else
    #define DEBUG_PRINTF(format, ...) fprintf(stderr, format, ##__VA_ARGS__)
#endif

Usage:

DEBUG_PRINTF("Message with param (%s)\n", pString);

Upvotes: 2

Related Questions