android打印参数类型,__android_log_vprint可变参数打印日志
想到把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);
}
// 測試:
#include
Log_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();
總結
以上是生活随笔為你收集整理的android打印参数类型,__android_log_vprint可变参数打印日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python123测验7程序题答案_Py
- 下一篇: java 命令行参数 _java命令行参