- _android_log_print 的常用方式
#define LOGTAG ltx
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOGTAG, __VA_ARGS__)
int __android_log_print(int prio, const char* tag, const char* fmt, ...)
使用__VA_ARGS__ (可变参数宏)把参数传递给宏LOGD,宏定义展开后,实际的参数就传给_android_log_print了。 _android_log_print函数与 printf 函数相似,以下方式有相同的效果;
#define LOGD(...) printf(__VA_ARGS__)
- 为LOG添加更多信息,需要添加format格式
以下代码添加了函数信息;使用format作为间隔,将函数名参数填充到%s格式,而__VA_ARGS__ 作为可变参数宏,可自由打印需要的参数。
#define LOGD(format,...) __android_log_print(ANDROID_LOG_DEBUG, LOGTAG, "%s " format, __func__, __VA_ARGS__)
但在C++ 中这种方式会出错,需要添加在前面添加##符号;当可变参数个数为0时,需要使用##号将前面的逗号去掉,才能正确打印。以下为正确添加打印信息的代码:
#define LOGD(format,...) __android_log_print(ANDROID_LOG_DEBUG, LOGTAG, "%s " format, __func__, ##__VA_ARGS__)
#define LOGD(format,...) printf(LOGTAG " %s "format, __FUNCTION__, ##__VA_ARGS__)
|