想到把JNI下的
__android_log_print();函数进行封装,可是这个函数的参数是可变长参数;对于可以变长的参数,我们可以使用以下函数msdn提供的变量和函数进行实现封装可变参数传递的函数;
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
void va_start( va_list arg_ptr ); (UNIX version)
void va_start( va_list arg_ptr, prev_param ); (ANSI version)
参数含义:
type:参数类型
arg_ptr:指向参数列表的指针
prev_param:第一个参数的类型
msdn也提供了相关的例程,但是在JNI使用中遇到的这个问题,就直接使用JNI的例子进行测试;
/jni/Log.h
#include
#include
void Log_i(const char* log, ...);
/jni/Log.cpp
#include"Log.h"
void Log_i(const char* log, ...) {
va_list arg;
va_start(arg, log);
__android_log_vprint(ANDROID_LOG_INFO, "JniLogTools", log, arg);
va_end(arg);
}
// 测试: