我有一个以标准方式使用可变参数的 c 函数,下面是一个简化示例:
void func(parameter,...) {
va_list args;
va_start(args, parameter);
//process args
v1 = va_arg(args,sometype);
v2 = va_arg(args,sometype);
...
vn = va_arg(args,sometype);
va_end(args);
}
//call func
func(parameter, p1, p2, ..., pn);
在所有 armv7s 及更低版本的设备以及包括 64 位模拟器在内的所有模拟器上,这都成功了,并且将 v1 到 vn 的变量分配给 p1 到 pn,但是当它在 arm64 上执行时,似乎可变参数列表是向后的( v1 = pn,v2 = pn-1, ..., vn = p1)
有什么解决办法吗?还是我错过了描述此更改的文档?
谢谢
编辑:
我没有提到这个问题的一个关键因素,我之前没有想到要提到。我试图用一个通用的可变参数函数来混合非可变参数函数。
注意:使用的编译器是 Apple LLVM 5.0