Создание макроса расширения в зависимости от его аргументов - PullRequest
0 голосов
/ 08 марта 2011

Я унаследовал код, который содержит макросы отладки.

#define DEBUG_LEVEL_NONE 0
#define DEBUG_LEVEL_ONE 1
#define DEBUG_LEVEL_TWO 2

#if DEBUG_LEVEL == DEBUG_LEVEL_NONE
  #define DEBUG(print_level, str)

#else /* DEBUG_LEVEL */
  #define DEBUG(print_level, str)                                  \
    {                                                              \
      if (DEBUG_LEVEL >= print_level)                              \
      {                                                            \
        printf("%-25s %4d %2d:", __FILE__, __LINE__, print_level); \
        printf(str);                                               \
        fflush(NULL);                                              \
      }                                                            \
     }
#endif /* DEBUG_LEVEL */

Все работает нормально, но я бы хотел избежать лишнего кода и проверки на более низкие уровни отладки.

Я знаю, что не могу поместить тесты препроцессора в определения макросов. Есть ли способ получить эффект вроде

#define DEBUG(print_level, str)                                 \
  {                                                             \
  #if (DEBUG_LEVEL >= print_level)                              \ 
    printf("%-25s %4d %2d:", __FILE__, __LINE__, print_level);  \
    printf(str);                                                \
    fflush(NULL);                                               \
  #endif                                                        \
  }

спасибо

1 Ответ

0 голосов
/ 08 марта 2011

Вы можете использовать простое «если», любой приличный компилятор будет постоянно складывать условие и исключать тело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...