在没有 va_* 的情况下使用省略号是否可以接受?
Is it acceptable to use ellipsis without va_*?
我经常看到关于省略号的教程有这样的例子:
void foo(int i, ...){
int *p = &i;
++p;
//...
}
我只是想知道,这种方法在标准方面是否正确?我可以在没有 va_* 宏的情况下使用可变参数吗?也许有些实现以相反的顺序存储 args,或者像这样。
UPD: "Use" = 可移植且可靠地传递参数
如何将参数传递给函数的机制是非常特定于实现的。它们可以通过寄存器或其他一些方法在堆栈上传递,并且方法可能因数据类型而异。
C standard 的第 7.16 节中指定的函数/宏的 stdarg 系列(va_start
、va_arg
、va_end
等)抽象了所有这些并且是 唯一 处理可变参数列表的标准兼容方式。
I often see tutorials about ellipsis with examples like this:
只是为了绝对清楚 - 这个例子是残酷的,最好避免教程。
...
语法的有效使用(可变参数模板和宏)不需要使用 va_*
工具,但是 none 其中看起来像您发布的示例代码。
我经常看到关于省略号的教程有这样的例子:
void foo(int i, ...){
int *p = &i;
++p;
//...
}
我只是想知道,这种方法在标准方面是否正确?我可以在没有 va_* 宏的情况下使用可变参数吗?也许有些实现以相反的顺序存储 args,或者像这样。
UPD: "Use" = 可移植且可靠地传递参数
如何将参数传递给函数的机制是非常特定于实现的。它们可以通过寄存器或其他一些方法在堆栈上传递,并且方法可能因数据类型而异。
C standard 的第 7.16 节中指定的函数/宏的 stdarg 系列(va_start
、va_arg
、va_end
等)抽象了所有这些并且是 唯一 处理可变参数列表的标准兼容方式。
I often see tutorials about ellipsis with examples like this:
只是为了绝对清楚 - 这个例子是残酷的,最好避免教程。
...
语法的有效使用(可变参数模板和宏)不需要使用 va_*
工具,但是 none 其中看起来像您发布的示例代码。