Отладка определения макроса в кроссплатформенном проекте - PullRequest
0 голосов
/ 03 апреля 2012

В нашем кроссплатформенном c-проекте мы используем макрос для регистрации:

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

Пример использования DEBUG_PRINTF:

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

Это нормально. Согласно справочнику KdPrint вызов KdPrint требует двойных скобок:

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

Мой вопрос заключается в том, как обращаться с уже существующими макросами, такими как (1) и (2), путем переноса DEBUG_PRINTF на другую платформу, такую ​​как linux, в userspace ?

Например, определение

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

не компилируется для макросов, таких как (1).

1 Ответ

2 голосов
/ 03 апреля 2012

Я бы сделал это наоборот:

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

Использование:

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