非常直接,在 x86 构建中我可以这样做:
static id method(id)(id self, SEL _cmd, ...) {
va_list args;
va_start(args, _cmd);
如您所知,args 将包含一个指向堆栈的指针,并通过以下方式: 参数 += 大小(类型);
我可以遍历完整的参数列表。
保持简短,args 将包含一个列表,其中包含指向我的参数的指针。
我希望它能在 ios X64 设备上工作,但它没有按预期工作,
va_list args;
va_start(args, _cmd);
不再返回指向包含参数的栈顶的指针=/
如何像在 ios armv7/7s 中那样获取指向 ios arm64 中参数的指针列表?
谢谢
最佳答案
stdarg/variadic 调用是否返回任何类型的堆栈指示取决于实现,不应依赖(例如,特定的 abi/编译器实现可能没有用于放置参数的堆栈)。可以保证的是,您可以以标准方式使用它来评估函数的未命名参数:
static id method(id)(id self, SEL _cmd, ...) {
va_list args;
va_start(args, _cmd);
const char* pointerArg = va_arg(args, const char *);
int arg = va_arg(args, int);
va_end(args);
}
每次调用 va_arg 都会返回一个适当类型的参数,并移动 args 以引用下一个参数。
更多信息,您可以查看 stdarg.h wikipedia page
关于ios - 在 iOS x64 中获取可变参数函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374084/