c\c++将不定长参数的函数定义为:
a.至少要有一个参数;
b.所有不定长的参数类型传入时都是dword类型;
c.需在某一个参数中描述参数的总个数或将最后一个参数赋值为结尾标记。
有了这三个特性,就可以是实现不定参数的函数。(printf函数就是利用第一个参数来获取参数总个数的,只需要检查printf函数中第一个参数指向的字符串中包含几个“%”就可以确定其后的参数个数(“%%”形成的转义字符除外))

根据参数的传递特性,只要确定第一个参数的地址,对其地址值做加法,就可访问到此参数的下一个参数所在的地址。获取参数的类型为了解释地址中的数据。上面提到的第三点就是为了获取参数的个数,其目的是正确访问到最后一个参数的地址,以防止访问参数空间越界。

应用:
_cdecl:C\C++默认的调用方式,调用方平衡栈,不定参数的函数可以使用
_stdcall:被调用方平衡栈,不定参数的函数无法使用
_fastcall:寄存器方式传参,被调用方平衡栈,不定参数的函数无法使用

2020-11-28(不定参数的函数)相关推荐

  1. C++不定参数个数函数的写法

    C++不定参数个数的函数比较常见,比如printf,先写一个字符串,在字符串里有0个或多个%,每个%要对应后面一个数据或者字符之类的东西,理论上有多少个%都是没问题的,难不成还要搞几亿个printf的 ...

  2. python不定参数的函数实现_python传入不定参数是什么

    python中允许自定义函数,自定义的函数,可以传入固定的参数和不确定的参数,下面具体分析一下. 如何理解python不定长参数?*args 和 **kwargs 是什么意思?为什么要使用它们?下面我 ...

  3. 《惢客创业日记》2020.11.28(周六)谁有谁的身不由己?

    今天,身体有点扛不住了,昨天又熬夜到了两点,做手术的地方又疼了好几天,加上头晕头沉和眼痛的毛病袭来,只能在家里躺在床上干活了. 上午,又重新规划了一下近期的工作,主要包括:惢客1-7项的演示校验和演示 ...

  4. SQL server 2012 下载,安装,磁力链接,下载地址 2020.11.28

    因为现在这个官方网站等不进去下载,而且大多数资源都是百度云盘,下载特慢,所以我做了一个磁力链接希望能接力. 链接:magnet:?xt=urn:btih:6ZUIY3SDGMBMDF6RTI2EXH2 ...

  5. arg是什么函数_不定参数函数实现var_arg系列的宏

    电驴的源码日志模块有一个叫 DebugLogError 函数,其签名如下: //代码位于easyMule-master/src/WorkLayer/Log.h 55行void DebugLogErro ...

  6. Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]

    1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...

  7. iOS 实现不定参数方法

    在iOS要实现不定参数的函数,有一个方案是用C/C++中的va_list.va_start.va_arg.va_end来实现.这样实现需要一个哨兵参数,就是调用方法是最后必须要加一个nil或者0的参数 ...

  8. C、C++不定参数的使用

    不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多.除了格式化输出之外,我实在没看到多少应用.主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替 ...

  9. C语言———不定参数标准库 stdarg.h

    前言: 在很多工程代码中,工程师考虑到后续软件设计的兼容性和扩展性,在接口函数中时常会使用一些可变参数.一开始全部考虑到这些很难,因为统筹全局需要经验和思考来支撑.C语言标准库<stdarg.h ...

最新文章

  1. hdu1287 破译密码
  2. 【PAT乙级】1092 最好吃的月饼 (20 分)
  3. Java中实现使用split方法分隔字符串
  4. 【数据结构与算法】之深入解析“格雷编码”的求解思路与算法示例
  5. 新书品读《三级网络技术预测试卷与考点解析》,欢迎拍砖、跟砖提建议。
  6. 活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!
  7. kettle etl 入门第一篇
  8. c:\program files\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189:
  9. HTML 内容不能被选择,不能被复制
  10. 贴张我家养的狗狗们的照片!
  11. 2022中国边缘计算企业20强
  12. 一文学懂经典算法系列之:直接选择排序(附讲解视频)
  13. 财务管理都学什么计算机课程,计算机财务管理课程教学大纲.DOC
  14. 木本坚果的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. byte(字节)根据长度转成kb(千字节)和mb(兆字节)
  16. 【C实现算法00】一个数组中除一个(两个)数只出现一次外其它数字都出现了两次,找出这个数,编程实现。
  17. c#自定义日历插件,给重要日期添加色彩。以及系统自带的monthCalendar日历插件
  18. 十七节 samba nfs共享
  19. 查询mysql 的内存使用_如何查看MySQL内存使用情况
  20. html没有注册类,电脑提示没有注册类别的解决方法大全

热门文章

  1. 成功解决Windows无法启动服务NVIDIA Dispaly Container LS服务(位于本地计算机上),错误2:系统找不到指定的文件
  2. DL之Keras: Keras深度学习框架的注意事项(默认下载存放路径等)、使用方法之详细攻略
  3. 成功解决\h5py\__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float
  4. 成功解决ValueError: Expected 2D array, got 1D array instead: Reshape your data either using array.reshap
  5. 剑指Offer——斐波那契数列
  6. Sersync实现触发式文件同步
  7. 关于接口 RandomAccess
  8. POJ-2480 Longge's problem 积性函数
  9. [Buzz.Today]HP停止 webOS 设备的研发和运作
  10. NHibernate部分错误