想到把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可变参数打印日志相关推荐

  1. #{}不自动改参数类型_【Just For Fun】C - 可变参数函数、可变参数宏 __VA_ARGS__、额外的逗号

    [Just For Fun] 本系列纯粹娱乐.研究用.一些旁门左道的东西. 事实上可能完全没用. (๑•̀ω•́๑) 對於可变参数函数.可变参数宏 __VA_ARGS__ , 我曾經有在另一些地方寫過 ...

  2. Android JNI 第三篇 Java参数类型与本地参数类型对照

    转载请标明出处: http://blog.csdn.net/michael1112/article/details/56665383 江东橘子的博客 这一篇从基础上了解一些Java参数类型与本地参数类 ...

  3. python中可变参数args传入函数时储存的类型是_[转载]Python中函数的参数定义和可变参数*args与**args...

    Python中函数的参数定义和可变参数 *args与**args区别 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和** ...

  4. python中可变参数和关键字参数_python的可变参数和关键字参数(*args **kw)

    本文是来自廖大的python教程其中我一直忘记的部分.算是一个笔记把.因为日常这俩参数名字一直搞混 可变参数 在Python函数中,还可以定义可变参数.顾名思义,可变参数就是传入的参数个数是可变的,可 ...

  5. 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...

    票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案 使用E-Form++源码库开发任何标签,票据,文档,条码 ...

  6. 票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案

    票据打印, 银行账单打印, 标签印刷, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印,数据库印刷,HMI报表打印,VC++源码库解决方案 -- 全球领先.100%源码全开放.可用 ...

  7. Kotlin传递可变长参数给Java可变参数方法

    定义Java可变参数方法 package com.tcl.john.studymvvm.utils;/*** 调用Java方法的工具类* Created by ZhangJun on 2017/10/ ...

  8. c语言 可变参数的宏,可变参数的宏__ VA_ARGS__的用法

    回顾 在[ANSIC几种特殊的标准定义]中我们讲述了比较常用的几项: __FILE__:正在编译文件的路径及文件名 __LINE__:正在编译文件的行号 __DATE__:编译时刻的日期字符串 如&q ...

  9. python 默认参数后接可变参数_Python可变参数会自动填充前面的默认同名参数实例...

    Python可变参数会自动填充前面的默认同名参数实例 最近在学习Python的时候遇到一个知识点,在此记录下来 可变参数会自动填充前面的同名默认参数 比如下面这个函数 def add_student( ...

最新文章

  1. Android Studio 生成签名的APK
  2. Oracle 字符串函数
  3. BZOJ 2742: [HEOI2012]Akai的数学作业
  4. c++callback回调实例
  5. 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计
  6. 应用层协议之CCNA必备知识点精髓
  7. STM32工作笔记0012---认识老化试验
  8. java中常用的包 类和接口_java.util包常用的类和接口
  9. The Learning route of GNN
  10. 投标文件模板 | 信息化智慧校园项目投标方案 | word版
  11. ai人工智能语音分析系统_语音应用搜索正在改变语音AI是领先者
  12. 传感器课程实验:Pt100 铂电阻测温特性实验
  13. 关于VMBox重启无法打开虚拟机问题
  14. java excel 批注_Java 添加、修改、读取、复制、删除Excel批注
  15. ​当AI搞起艺术来……
  16. c#中屏蔽窗体关闭的消息
  17. MATLAB神经网络汉字数字字母识别(任何字符,GUI)
  18. 四相八拍步进c语言程序,四相八拍的步进电机简单的驱动
  19. 九大PHP开源Wiki(维基百科)程序评测
  20. 深度(Deepin)系统二三事

热门文章

  1. $HOME/$user/.权限导致用户无法登陆图形界面
  2. 女人,向《奋斗》中的夏琳米莱们学习什么
  3. [原创]公布读取瑞星注册码的小程序源代码
  4. mysql双机热备 配置文件,MYSQL 双机热备配置手册()
  5. mysql无法与外部健形成约束_MySQL Rails:错误:150“外键约束不正确”
  6. django ipython shell_通過django的shell_plus編寫ipython腳本
  7. 罗马音平假名片假名转换器_关于五十音你所要知道的一切!文末附日网高清字帖...
  8. Python默认参数
  9. Java日历compareTo()方法与示例
  10. exit c+_C / C ++中的exit(0)vs exit(1)与示例