ios - 在 iOS x64 中获取可变参数函数的参数

标签 ios objective-c arm variadic arm64

非常直接,在 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/

相关文章:

ios - 旋转到横向时 Xcode 8 模拟器问题

ios - Realm Swift iOS - 无法设置主键

ios - Swift - UIControl addTarget 不起作用

ios - 并发调度队列没有被阻塞

c - ARM NEON 内部函数 : Limit values of a vector to 0-255

ios - 我如何知道 *.a 文件是为哪个架构构建的?

iphone - iphone 应用程序中的表单

objective-c - 启用模块的 Prefix.pch?

c++ - 代码使用 g++ 编译,但不使用 arm-none-eabi-g++

objective-c - 如何使用单个按钮和单个操作方法显示/隐藏 UIPopoverController