小编Skr*_*die的帖子

具有无限多(未命名)参数的函数 - 如何正确访问这些参数?

我有一个棘手的问题,我今天一直在玩,但为此我还没有想出一个优雅的解决方案.

我们知道,表单的函数void func()需要无限多的参数.现在我已经整理了一个非常简单的最小工作代码片段:

#include <stdio.h>

int func()
{

    printf("%d, %d, %d, %d\n");
    return 0;
}

int func() {
    sucks(0 /* Offset */, 1, 2, 3, 4);
}
Run Code Online (Sandbox Code Playgroud)

好的,我们现在可以使用尽可能多的参数调用func().我正在试验的问题是:我们如何正确访问这些论点的内容?printf()函数打印出类似这样的东西......只是为了验证参数是否实际存在:

anonymous@melina:/tmp$ ./a.out 
1 2 3 4
Run Code Online (Sandbox Code Playgroud)

所以现在的问题是:上面的代码片段有点hackish.有没有正确的方法来访问这些参数?或者你是否真的要乱用堆栈指针和内联汇编?作为第一次尝试,我考虑将堆栈指针放在函数的开头,例如,

uint64_t sp;
asm( "mov %%rsp, %0" : "=rm" ( sp ));
Run Code Online (Sandbox Code Playgroud)

...并以某种方式使用它,猜测这些参数实际上在哪里(在内存中).但是......到目前为止我没有成功.

c

-2
推荐指数
1
解决办法
65
查看次数

标签 统计

c ×1