医院网站建设的好处,wordpress 浮动定位,Wordpress 提交百度,在线代码生成器想到把JNI下的__android_log_print()#xff1b;函数进行封装#xff0c;可是这个函数的参数是可变长参数#xff1b;对于可以变长的参数#xff0c;我们可以使用以下函数msdn提供的变量和函数进行实现封装可变参数传递的函数#xff1b;type va_arg( va_list arg_ptr, ty…想到把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#includeLog.hvoid Log_i(const char* log, ...) {va_list arg;va_start(arg, log);__android_log_vprint(ANDROID_LOG_INFO, JniLogTools, log, arg);va_end(arg);}// 测试#includeLog_i(打开文件错误 ! err %d\n,errno);\android-ndk-r9d\platforms\android-19\arch-arm\usr\include\android\log.h//在这个头文件中可以看到typedef enum android_LogPriority {ANDROID_LOG_UNKNOWN 0,ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ANDROID_LOG_VERBOSE,ANDROID_LOG_DEBUG,ANDROID_LOG_INFO,ANDROID_LOG_WARN,ANDROID_LOG_ERROR,ANDROID_LOG_FATAL,ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */} android_LogPriority;/** Send a formatted string to the log, used like printf(fmt,...)*/int __android_log_print(int prio, const char *tag, const char *fmt, ...)#if defined(__GNUC__)__attribute__ ((format(printf, 3, 4)))#endif;/** A variant of __android_log_print() that takes a va_list to list* additional parameters.*/int __android_log_vprint(int prio, const char *tag,const char *fmt, va_list ap);所以如果封装了可变参数不能使用__android_log_print()需要使用为可变参数专门提供的函数 __android_log_vprint()