使用C中的预处理器宏屏蔽调试级别

时间:2018-01-10 14:48:46

标签: c debugging macros c-preprocessor mask

我正在尝试用C语言写一个带有几个“掩码”的调试函数,它允许我通过更改预处理器标志来打开/关闭输出。到目前为止,我尝试使用宏方式(ICS_debug_func是类似printf的函数,将输出推送到控制台):

// enabling debug masking
#define EN_DEBUG_ICS_USER 1 // any passed with pushed user debug flag
#define EN_DEBUG_ICS_TCP  1 // ICS_tcp_server.c
#define EN_DEBUG_ICS_OS   0 // ICS_cmsis.c
#define EN_DEBUG_ICS_CORE 0 // ICS_lib.c

// enum debug mask
#define DEBUG_ICS_CORE  0
#define DEBUG_ICS_OS    1
#define DEBUG_ICS_USER  2
#define DEBUG_ICS_TCP   3

#if EN_DEBUG_ICS_OS == 1
#define ICS_debug(DEBUG_ICS_OS,...) ICS_debug_func(__VA_ARGS__)
#else
#define ICS_debug(DEBUG_ICS_OS,...) ((void)0);
#endif

#if EN_DEBUG_ICS_USER == 1
#define ICS_debug(DEBUG_ICS_USER,...) ICS_debug_func(__VA_ARGS__)
#else
#define ICS_debug(DEBUG_ICS_USER,...) ((void)0);
#endif

#if EN_DEBUG_ICS_TCP == 1
#define ICS_debug(DEBUG_ICS_TCP,...) ICS_debug_func(__VA_ARGS__)
#else
#define ICS_debug(DEBUG_ICS_TCP,...) ((void)0);
#endif

我希望用户以这种方式调用该函数:

ICS_debug(DEBUG_MASK, "Some error %d\r\n", err

问题是预处理器不能将ICS_debug(DEBUG_ICS_USER,...)和ICS_debug(DEBUG_ICS_USER,...)识别为单独的,但是他重新定义它们给我:warning: "ICS_debug" redefined 是否有一种解决方法可以让他以某种方式识别作为ICS_debug的第一个参数传递的标签?

由于

0 个答案:

没有答案