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可变参数打印日志相关推荐
- #{}不自动改参数类型_【Just For Fun】C - 可变参数函数、可变参数宏 __VA_ARGS__、额外的逗号
[Just For Fun] 本系列纯粹娱乐.研究用.一些旁门左道的东西. 事实上可能完全没用. (๑•̀ω•́๑) 對於可变参数函数.可变参数宏 __VA_ARGS__ , 我曾經有在另一些地方寫過 ...
- Android JNI 第三篇 Java参数类型与本地参数类型对照
转载请标明出处: http://blog.csdn.net/michael1112/article/details/56665383 江东橘子的博客 这一篇从基础上了解一些Java参数类型与本地参数类 ...
- python中可变参数args传入函数时储存的类型是_[转载]Python中函数的参数定义和可变参数*args与**args...
Python中函数的参数定义和可变参数 *args与**args区别 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和** ...
- python中可变参数和关键字参数_python的可变参数和关键字参数(*args **kw)
本文是来自廖大的python教程其中我一直忘记的部分.算是一个笔记把.因为日常这俩参数名字一直搞混 可变参数 在Python函数中,还可以定义可变参数.顾名思义,可变参数就是传入的参数个数是可变的,可 ...
- 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...
票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案 使用E-Form++源码库开发任何标签,票据,文档,条码 ...
- 票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案
票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案 -- 全球领先.100%源码全开放.可用 ...
- Kotlin传递可变长参数给Java可变参数方法
定义Java可变参数方法 package com.tcl.john.studymvvm.utils;/*** 调用Java方法的工具类* Created by ZhangJun on 2017/10/ ...
- c语言 可变参数的宏,可变参数的宏__ VA_ARGS__的用法
回顾 在[ANSIC几种特殊的标准定义]中我们讲述了比较常用的几项: __FILE__:正在编译文件的路径及文件名 __LINE__:正在编译文件的行号 __DATE__:编译时刻的日期字符串 如&q ...
- python 默认参数后接可变参数_Python可变参数会自动填充前面的默认同名参数实例...
Python可变参数会自动填充前面的默认同名参数实例 最近在学习Python的时候遇到一个知识点,在此记录下来 可变参数会自动填充前面的同名默认参数 比如下面这个函数 def add_student( ...
最新文章
- Android Studio 生成签名的APK
- Oracle 字符串函数
- BZOJ 2742: [HEOI2012]Akai的数学作业
- c++callback回调实例
- 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计
- 应用层协议之CCNA必备知识点精髓
- STM32工作笔记0012---认识老化试验
- java中常用的包 类和接口_java.util包常用的类和接口
- The Learning route of GNN
- 投标文件模板 | 信息化智慧校园项目投标方案 | word版
- ai人工智能语音分析系统_语音应用搜索正在改变语音AI是领先者
- 传感器课程实验:Pt100 铂电阻测温特性实验
- 关于VMBox重启无法打开虚拟机问题
- java excel 批注_Java 添加、修改、读取、复制、删除Excel批注
- ​当AI搞起艺术来……
- c#中屏蔽窗体关闭的消息
- MATLAB神经网络汉字数字字母识别(任何字符,GUI)
- 四相八拍步进c语言程序,四相八拍的步进电机简单的驱动
- 九大PHP开源Wiki(维基百科)程序评测
- 深度(Deepin)系统二三事
热门文章
- $HOME/$user/.权限导致用户无法登陆图形界面
- 女人,向《奋斗》中的夏琳米莱们学习什么
- [原创]公布读取瑞星注册码的小程序源代码
- mysql双机热备 配置文件,MYSQL 双机热备配置手册()
- mysql无法与外部健形成约束_MySQL Rails:错误:150“外键约束不正确”
- django ipython shell_通過django的shell_plus編寫ipython腳本
- 罗马音平假名片假名转换器_关于五十音你所要知道的一切!文末附日网高清字帖...
- Python默认参数
- Java日历compareTo()方法与示例
- exit c+_C / C ++中的exit(0)vs exit(1)与示例