当前位置:  开发笔记 > 编程语言 > 正文

使用C宏启用/禁用LOG级别

如何解决《使用C宏启用/禁用LOG级别》经验,为你挑选了2个好方法。

另一个选项 - 您可以只注释/取消注释ENABLE_DEBUG_LOGENABLE_ERROR_LOG禁用/启用相应的日志级别.

// #define ENABLE_DEBUG_LOG    // disable DEBUG_LOG
#define ENABLE_ERROR_LOG       // enable ERROR_LOG

#ifdef ENABLE_DEBUG_LOG
#define LOG_D(x)  {  printf("D:");  printf(x);}
#else
#define LOG_D(x) // nothing
#endif

#ifdef ENABLE_ERROR_LOG
#define LOG_E(x)  {  printf("E:");  printf(x);}
#else
#define LOG_E(x)  // nothing
#endif


M Oehm.. 5

您不能嵌套预处理器指令。但是您可以制作两个版本的宏,然后在#if或的专有部分中定义它们#ifdef

#define ENABLE_DEBUG_LOG 0

#if ENABLE_DEBUG_LOG != 0
#define LOG_D(...)  printf("D: " __VA_ARGS__)
#else
#define LOG_D(...)  // Do nothing
#endif

在这里,禁用的版本只是“吃掉”了LOG_D宏而没有执行任何操作。(请注意,未定义的宏在#if条件中被视为值0。)



1> artm..:

另一个选项 - 您可以只注释/取消注释ENABLE_DEBUG_LOGENABLE_ERROR_LOG禁用/启用相应的日志级别.

// #define ENABLE_DEBUG_LOG    // disable DEBUG_LOG
#define ENABLE_ERROR_LOG       // enable ERROR_LOG

#ifdef ENABLE_DEBUG_LOG
#define LOG_D(x)  {  printf("D:");  printf(x);}
#else
#define LOG_D(x) // nothing
#endif

#ifdef ENABLE_ERROR_LOG
#define LOG_E(x)  {  printf("E:");  printf(x);}
#else
#define LOG_E(x)  // nothing
#endif



2> M Oehm..:

您不能嵌套预处理器指令。但是您可以制作两个版本的宏,然后在#if或的专有部分中定义它们#ifdef

#define ENABLE_DEBUG_LOG 0

#if ENABLE_DEBUG_LOG != 0
#define LOG_D(...)  printf("D: " __VA_ARGS__)
#else
#define LOG_D(...)  // Do nothing
#endif

在这里,禁用的版本只是“吃掉”了LOG_D宏而没有执行任何操作。(请注意,未定义的宏在#if条件中被视为值0。)

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有