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;
}