自定义调试信息的输出
#define CMMB_LOG(format, ...) mmi_trace("[CMMB] "format" File:%s, Line:%d, Func:%s" , ##__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__);
#define CMMB_LOG(type, fmt, args...) __android_log_print(type, LOG_TAG, fmt, args)
#define CMMB_INF(fmt, ...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "[%s](%d): " fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define CMMB_ERR(fmt, ...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "[%s](%d): " fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define CMMB_WRN(fmt, ...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "[%s](%d): " fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__)
1) __VA_ARGS__ 是一个可变参数的宏,宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称