根据参数进行宏扩展

时间:2011-03-08 11:48:40

标签: preprocessor

我继承了包含调试宏的代码。

#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 :(得分:0)

你可以使用普通的“if”,任何体面的编译器都会对条件进行常数折叠并排除正文。