我正在玩堆栈和函数的调用参数.我想在这里实现的是直接使用堆栈获取变量参数的值.
当我不使用变量参数时,它工作(或似乎工作)很好.这是什么工作:
void test(int a, int b)
{
unsigned char *ptr;
int i;
ptr = (unsigned char*)&a;
for (i = 0; i < 4; i++)
{
printf("%d,", *ptr);
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,我可以检索b的值; 使用相同的代码
void test(int a, ...);
Run Code Online (Sandbox Code Playgroud)
因为函数的原型不起作用.
我不明白这里发生了什么.
你能帮助我吗?谢谢 !
编辑:好的,然后它看起来没有稳定可靠的方式来做我自己的那种东西.让我们说在callee函数中我知道变量参数的数据大小(但不是类型),有没有办法抓住它们?
在带有 ... 的函数中,您可以使用 va_* 宏
void test(int a, ...) {
va_list ap;
va_start(ap, a);
// Your code
va_end(ap);
}
Run Code Online (Sandbox Code Playgroud)