我正在尝试用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的第一个参数传递的标签?
由于