没有va_*使用省略号是否可以接受?

yrH*_*Jlb 1 c c++ standards

我经常看到关于省略号的教程,例如:

void foo(int i, ...){
    int *p = &i;
    ++p;
    //...
}
Run Code Online (Sandbox Code Playgroud)

而我只是想知道,这种方法在标准方面是否正确?我可以使用没有va_*宏的可变参数吗?也许某些实现以相反的顺序存储args,或类似的东西.

UPD: "使用"=可移植且可靠地传递args

dbu*_*ush 7

参数如何传递给函数的机制非常特定于实现.它们可以通过堆栈,寄存器或其他方法传递,并且方法可以根据数据类型而不同.

功能/宏stdarg头文件家庭(va_start,va_arg,va_end在第7.16指定等),C标准抽象了这一切,并且是唯一的处理变量参数列表符合标准的方式.