一個靈活的打印控制

#include
typedef enum {
    GT_TraceState_Disable = 0x00000000,
    GT_TraceState_Enable   = 0x00000001,
    GT_TraceState_EndValue = 0x00000002
} GT_TraceState;
typedef enum {
    GT_ERR = 0x00000010,
    GT_INFO             = 0x00000020,
    GT_DEBUG     = 0x00000030
} GT_TraceLevel;
#define GT_TraceState_Mask 0x0f
#define GT_TraceLevel_Mask 0xf0
#define GT_DEFAULT_LEVEL   (GT_ERR | GT_TraceState_Disable)
#define Module1Trace (GT_INFO | GT_TraceState_Enable)
#define Module2Trace GT_DEFAULT_LEVEL


#define TRACE_PRINT(module, level, fmt, args...) \
do{ \
if((module & GT_TraceState_Mask) == GT_TraceState_Enable) \
{ \
if((module & GT_TraceLevel_Mask) >= level) \
{ \
printf("%s->%d:%s " fmt, __FUNCTION__, __LINE__, #level, ##args); \
} \
} \
}while(0)


int main()
{
int ret = 10;
TRACE_PRINT(Module1Trace, GT_DEBUG, "module1 GT_DEBUG!! ret = %d\n", ret);
TRACE_PRINT(Module1Trace, GT_INFO, "module1 GT_INFO!! ret = %d\n", ret);
TRACE_PRINT(Module1Trace, GT_ERR, "module1 GT_ERR!! ret = %d\n", ret);
TRACE_PRINT(Module2Trace, GT_DEBUG, "module2 GT_DEBUG!! ret = %d\n", ret);
TRACE_PRINT(Module2Trace, GT_INFO, "module2 GT_INFO!! ret = %d\n", ret);
TRACE_PRINT(Module2Trace, GT_ERR, "module2 GT_ERR!! ret = %d\n", ret);
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章