可变参数函数的调用约定

问题描述

初始化可变参数列表时,使用宏va_start并传递list_name,然后传递the last fixed parameter before the va list starts,因为“最后一个固定参数与第一个变量n相邻” 不知何故,这有助于识别堆栈中的var arg长度/位置(我之所以说是因为我不明白如何)。

使用cdecl调用约定(即从righ到左推入堆栈参数)the last fixed parameter before the va list starts在识别列表长度方面有什么用?例如,如果该参数是一个整数3,而变量参数也有一个3,那么被叫方将如何知道可变参数列表不止于此,因为还有另一个3 (固定参数),应该在那里结束?例如f(int a,int b,... )-> 通话 f(1,3,1,2,3)

反之亦然,有 guardian “样式”,您可以在调用函数时在可变参数的末尾添加NULL指针。再说一遍:如果NULL首先被推入栈,那将如何有用?难道不应该在参数的固定部分和可变部分之间插入NULL吗? (例如f(int a,... )-> 通话 f(a,b,NULL,param1,param2)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)