首页 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
资讯 业界资讯 软件杂谈 编程开发 网站建设 网络观查 搜索引擎 移动应用 网站运营 网络地图
开发 移动开发 Web前端 架构设计 编程语言 互联网 数据库 系统运维 云计算 开发杂谈
[编程语言] C语言可变参数函数详解 va_list va_arg va_start宏
C语言可变参数函数详解 va_list va_arg va_start宏

可变参数函数:

参数数目是可变的。比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的,形式是形参是三个点。 如printf 函数的声明:
int printf ( const char * format, ... )
不过并不是所有的都应该如此,也可以像这样:void show(int x,int y, ...);根据形式可知则至少需要两个参数。那能不能这样 void show(...),不能,因为我们需要根据第一个参数获取整个参数列表的地址。具体下面详解。
一般我们用可变参数都是这种形式,下面就用这个形式的举例子 void show(const char* data,...)
可变参数函数的几个宏:va_list va_start va_end va_arg 
那怎么得到并使用多个参数呢 快哭了

首先,你需要在函数中定义一个va_list变量p,在此理解为一个指针。但是这指针现在还没有指向东西(野指针)。
怎么让他指向我们的参数列表:用va_start(p,data),data是我们函数的第一个参数,调用这个宏之后,p指向了参数列表中data后的位置,获取参数列表完成。
想获取某个参数该如何,va_arg(p,类型);比如想获取一个整形参数,可以这样a=va_arg(p,int); 之前想怎么知道有多少个参数,并没有直接获取有多少个参数的宏。
最后调用下:va_end(p)就行了。
OK,到此可变参数的基本用法已经讲完。
项目中用到可变参数的不多,大多数是生成日志,报错之类的。根据可变参数函数,生成日志文件,一般用vfprintf,方法如下。当然这个时候第一个参数必须是参数格式字符串"%s %d "的,后面跟实际参数。写入文件流。
void LogMsg(char *strMsg, ...)
{
  va_list  aplist;
  FILE     *fp;
    va_start(aplist, strMsg);
    fp = fopen("my.log", "a");
    if (fp != NULL) 
    {
      vfprintf(fp, strMsg, aplist);
      fclose(fp);
    }
    va_end(aplist);
}




 此文从网络中自动搜索生成,不代表本网站赞成被搜索网站的内容或立场    查看原文
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年12日历
2018-12-13 8:10:31
 
  网站联系 软件世界网-www.sjsjw.com ©2014 蜀ICP备06016416号 三峰网旗下网站