#include <stdio.h>
#define LOG_D(x) { printf("D:"); printf(x);}
#define LOG_E(x) { printf("E:"); printf(x);}
void test(void)
{
LOG_D("ALL is well " );
}
Run Code Online (Sandbox Code Playgroud)
我有一个非常庞大的代码,它具有不同级别的日志,如上面的代码.在最终测试的库中,我只需要一个错误日志以减少代码大小.
所以我想要这样的东西
#define ENABLE_DEBUG_LOG 0
#define ENABLE_ERROR_LOG 1
#define LOG_D(x) {#if(ENABLE_DEBUG_LOG==1) printf("D:"); printf(x); #endif}
#define LOG_E(x) {#if(ENABLE_ERROR_LOG==1) printf("E:"); printf(x);#endif}
Run Code Online (Sandbox Code Playgroud)
我添加了#if(ENABLE_DEBUG_LOG == 1)只是为了解释,我需要一些可以编译的解决方案.
另一个选项 - 您可以只注释/取消注释ENABLE_DEBUG_LOG并ENABLE_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
Run Code Online (Sandbox Code Playgroud)
您不能嵌套预处理器指令。但是您可以制作两个版本的宏,然后在#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
Run Code Online (Sandbox Code Playgroud)
在这里,禁用的版本只是“吃掉”了LOG_D宏而没有执行任何操作。(请注意,未定义的宏在#if条件中被视为值0。)