有没有办法使用指针访问函数中的可变参数?我尝试过像
这样的事情void test(int p, ...)
{
int firstarg = *(&p - 1);
}
但这不起作用。
va_start和va_arg如何访问这些参数?
答案 0 :(得分:4)
没有便携式方法可以做到这一点 - 没有充分的理由使用任何非便携式方法(除非您实际上为新系统编写<stdarg.h>
)
<stdarg.h>
中定义的宏必须以某种方式实现。您可以检查用于实现的标头的内容,并可能重现它们的作用 - 但结果可能不适用于其他系统。
如果您对系统中va_start
和va_arg
的实现方式感到好奇,可以选择使用它们的程序并在预处理器阶段运行它。如果您正在使用gcc,则gcc -E
会执行此操作。但是在某些系统上,它们可能是根据特定于编译器的扩展来实现的,因此结果可能并不能说明多少。
好奇心很好,但在这种特殊情况下,您真正需要知道的是<stdarg.h>
中定义的宏按指定的方式工作。
答案 1 :(得分:0)
如果没有<stdarg.h>
标头,则无法访问变量函数参数。
标准库的这一部分属于“语言支持”类别,即它包含您需要的库功能,以便利用某些语言功能。