在没有stdarg的情况下访问可变参数函数参数

时间:2014-06-11 22:14:52

标签: c pointers variadic-functions

有没有办法使用指针访问函数中的可变参数?我尝试过像

这样的事情
void test(int p, ...)
{
    int firstarg = *(&p - 1);
}

但这不起作用。

va_start和va_arg如何访问这些参数?

2 个答案:

答案 0 :(得分:4)

没有便携式方法可以做到这一点 - 没有充分的理由使用任何非便携式方法(除非您实际上为新系统编写<stdarg.h>

<stdarg.h>中定义的宏必须以某种方式实现。您可以检查用于实现的标头的内容,并可能重现它们的作用 - 但结果可能不适用于其他系统。

如果您对系统中va_startva_arg的实现方式感到好奇,可以选择使用它们的程序并在预处理器阶段运行它。如果您正在使用gcc,则gcc -E会执行此操作。但是在某些系统上,它们可能是根据特定于编译器的扩展来实现的,因此结果可能并不能说明多少。

好奇心很好,但在这种特殊情况下,您真正​​需要知道的是<stdarg.h>中定义的宏按指定的方式工作。

答案 1 :(得分:0)

如果没有<stdarg.h>标头,则无法访问变量函数参数。

标准库的这一部分属于“语言支持”类别,即它包含您需要的库功能,以便利用某些语言功能。