另一个选项 - 您可以只注释/取消注释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
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。)
另一个选项 - 您可以只注释/取消注释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
您不能嵌套预处理器指令。但是您可以制作两个版本的宏,然后在#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。)