问题描述
初始化可变参数列表时,使用宏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 (将#修改为@)