浅谈C/C++中可变参数的原理
作者:网络转载 发布时间:[ 2012/9/19 9:55:13 ] 推荐标签:
运行结果如下:
可以看到即使传入的可变参数是std::string, 依然可以正常工作。
我们可以反汇编下看看这种情况下的参数传递过程:
很多时候编译器在传递类对象时,即使是传值,也会在堆栈上通过push对象地址的方式来传递,但是上面显然没有这么做,因为它要满足可变参数的调用约定,
另外,可以看到后在调用sumStdString后,由add esp, 58h来外部清栈。
一个std::string大小是28,58h = 88 = 28 + 28 + 28 + 4.
从上面的例子我们可以看到,对于可变参数的函数,有2种东西需要确定,一是可变参数的数量,二是可变参数的类型,上面的例子中,参数数量我们是在第一个参数指定的,参数类型我们是自己约定的。这种方式在实际使用中显然是不方便,于是我们有了_vsprintf,我们根据一个格式化字符串的来表示可变参数的类型和数量,比如C教程中入门要学习printf, sprintf等。
总的来说可变参数给我们提供了很高的灵活性和方便性,但是也给会造成不确定性,降低我们程序的安全性,很多时候可变参数数量或类型不匹配,会造成一些不容察觉的问题,只有更好的理解它背后的原理,我们才能更好的驾驭它。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11