当前位置: 首页 > wzjs >正文

恋爱网站建设工作总结个人总结

恋爱网站建设,工作总结个人总结,优化设计电子版在哪找,深圳网站制作费用多少可变参数函数 一,什么可变参数函数?二,实现机制1,函数调用时的栈与栈帧2,可变参数实现机制 一,什么可变参数函数? 普通函数: 声明时参数个数和类型都固定好,比如 int ad…

可变参数函数

  • 一,什么可变参数函数?
  • 二,实现机制
    • 1,函数调用时的栈与栈帧
    • 2,可变参数实现机制

一,什么可变参数函数?

普通函数:
声明时参数个数和类型都固定好,比如 int add(int a, int b),只能接收两个 int。

可变参数函数:
在声明时只写固定的“前导”参数,后面用 … 表示还有不定数量、也不定类型的参数。

有点抽象,下面直接上例子

int my_printf(UART_HandleTypeDef *huart, const char *format, ...)
{char buffer[512];//定义储存字符串的数组va_list arg;//定义可变参数类型int len;//储存字符串长度的变量va_start(arg, format);//初始化第一个参数len = vsnprintf(buffer, sizeof(buffer), format, arg);//格式化字符串va_end(arg);HAL_UART_Transmit(huart, (uint8_t *)buffer, (uint16_t)len, 0xFF);return len;
}

这是我们串口发送时使用的函数,第一个形参固定了是一个UART的句柄(包含UART的所有信息),后面的参数可以改变如:

my_printf(&huart1,"Value=%d\n", 42);
my_printf(&huart1,"A=%d, B=0x%02X, C=%.2f\n", 10, 0x5A, 3.14);

这里应该理解了为什么串口所有可变参数函数了吧
接下来讲讲可变参数函数的具体实现机制

二,实现机制

在讲可变参数函数之前,我们要先了解函数调用时的栈

1,函数调用时的栈与栈帧

栈存储了大量数据,当调用函数时会分出一部分空间,这部分空间就是栈帧,储存函数的信息(参数、局部变量、返回地址等)
注:这些信息会从右往左得挤进栈帧里。可变变量会跟在固定变量后面进入栈帧

2,可变参数实现机制

1,va_list 指针类型,用于指向可变参数列表中的当前位置。
va_list:
指针类型,在原代码中。arg就是用来储存可变变量地址的宏,它得类型就是va_list.
在串口功能中,我们需要访问可变变量,完成传输,arg就是用来储存这些可变变量的。

2,va_start 初始化第一个可变参数的位置,并且规定最后一个固定变量
储存可变变量的容器**(arg)有了,我们该如何访问栈帧里的可变变量呢?
va_start会访问最后一个固定变量的位置,再直接规定下一个位置为第一个可变变量。
arg 会被初始化并指向可变参数的开始位置,方便后续通过 va_arg 获取每个参数。
因为我们前面说了,可变变量是紧跟着固定变量进的栈。

3,va_end 代表对可变参数处理结束,可以释放va_list相关资源
va_end会告诉编译器,我们停止对可变变量的处理,并且清除arg


文章转载自:

http://5cUzLsA4.Ltywr.cn
http://W5lbEFsH.Ltywr.cn
http://fnd9IAUL.Ltywr.cn
http://epf0iAHz.Ltywr.cn
http://GFXzBNPW.Ltywr.cn
http://Awa1B3df.Ltywr.cn
http://GoKjprRQ.Ltywr.cn
http://vgmzqgyN.Ltywr.cn
http://1Ec7R2cT.Ltywr.cn
http://a8KzDt7j.Ltywr.cn
http://IURNEQ92.Ltywr.cn
http://oU69KL1I.Ltywr.cn
http://0WtTD93K.Ltywr.cn
http://XrIE7T57.Ltywr.cn
http://YsqsMPNp.Ltywr.cn
http://XO7Nh0og.Ltywr.cn
http://TXVquwqI.Ltywr.cn
http://ZZx4ru0h.Ltywr.cn
http://vsiCvD5l.Ltywr.cn
http://Ohed3Glj.Ltywr.cn
http://q4ZjefiW.Ltywr.cn
http://45M0ySzo.Ltywr.cn
http://EhXSEp2t.Ltywr.cn
http://eCqiD3XY.Ltywr.cn
http://EFxdYAfO.Ltywr.cn
http://bucXnjPL.Ltywr.cn
http://M0no5EWd.Ltywr.cn
http://zEEPJhfe.Ltywr.cn
http://ueddeRcW.Ltywr.cn
http://4PdISdOo.Ltywr.cn
http://www.dtcms.com/wzjs/750864.html

相关文章:

  • 网站免费高清素材软件有哪些网站建设课程性质
  • 呼和浩特制作网站外包和劳务派遣哪个好
  • 宿迁做网站哪家好关键词点击工具
  • 医疗网站建站做高铁在哪个网站买
  • 济南网站建设公司 推荐行知科技科技网站配色
  • 齐家网装修公司地址seo培训学校
  • php网站开发框架搭建网站和数据库
  • 网站建设和管理是教什么沧州网页重做
  • 免费奖励代码网站wordpress导航类网站
  • 网站点击快速排名优秀个人主页
  • 网站开发怎么找客户我是做性视频网站
  • 手机网站和微信网站的区别网站推广方法的费用
  • 建e网官网效果图seo技术服务
  • wordpress建站文本教程网站做法
  • 建官方网站的公司重庆九龙快报
  • 商业网站模板制作与开发打车软件app开发
  • 医疗生物科技 网站建设怎么知道网站的空间是谁做的
  • 专做机械类毕业设计的网站织梦网站app生成器
  • 锡林浩特网站建设深圳计算机速成班培训
  • 和网站开发公司如何签合同如需锦州网站建设
  • 今天的新闻是什么优化网络搜索引擎
  • 做电影资讯网站算侵权吗有一个网站专门做促销小游戏
  • 网站开发地图板块浮动软件开发定制app
  • 如何建设部网站查职称部门网站 法规制度 建设情况
  • 家具网站开发任务书营销手机软件开发定制
  • 建筑公司网站图片天津市区县档案部门网站建设指导意见
  • 简单的网站更新 关键词优化 关键词互联wordpress 网站卡
  • 帝国网站管理系统前台百度流量推广项目
  • 网上购物网站网站建设分析介绍类网站建设策划书范文
  • 北京网站搭建公司排行松岗营销型网站建设