#ifdef GCB_DEBUG #define dPrintf(arg...) //printf_P(arg) #define mmprintf(arg...) //printf_P(arg) #define ptzprintf(arg...) //printf_P(arg) #define vsprintf(arg...) //printf_P(arg) #define voprintf(arg...) //printf_P(arg)#define nctprintf(arg...) //printf_P(arg)#define pmprintf(arg...) //printf_P(arg)#define ssprintf(arg...) //printf_P(arg)#define smprintf(arg...) //printf_P(arg)#define errprintf(arg...) //do{printf_P(PSTR("\n[F:%s L:%d]"), __FILE__, __LINE__);printf_P(arg);}while(0)#define memprintf(arg...) //printf_P(arg)#define Printf(arg...) //printf(arg)#else#define dPrintf(arg...) #define mmprintf(arg...) #define ptzprintf(arg...) #define vsprintf(arg...)#define viprintf(arg...) #define nctprintf(arg...)#define voprintf(arg...) #define pmprintf(arg...)#define ssprintf(arg...)#define memprintf(arg...)#define smprintf(arg...)#define Printf #endif
首先#ifdef GCB_DEBUG下的每一行,后面的“//”都应该是没有的,不应该被注释掉意思是如果def GCB_DEBUG,则宏定义dPrintf(arg...)为后面的printf_P(arg);否则,定义为空。此为调试之用arg...意思是可变参数 不过根据标准,参数列表前面应该有一个不是可变参数的参数