在iOS x64中获取可变函数的参数
非常简单,在x86版本中,我可以做到:在iOS x64中获取可变函数的参数,ios,objective-c,arm,variadic,arm64,Ios,Objective C,Arm,Variadic,Arm64,非常简单,在x86版本中,我可以做到: static id method(id)(id self, SEL _cmd, ...) { va_list args; va_start(args, _cmd); 如您所知,args将包含指向堆栈的指针,并通过以下方式: args+=大小(类型) 我可以遍历参数的完整列表 保持简短,args将包含一个带有指向我的参数的指针的列表 我想在ios X64设备上运行,但它没有按预期运行 va_list args; va_start(args,
static id method(id)(id self, SEL _cmd, ...) {
va_list args;
va_start(args, _cmd);
如您所知,args将包含指向堆栈的指针,并通过以下方式:
args+=大小(类型)
我可以遍历参数的完整列表
保持简短,args将包含一个带有指向我的参数的指针的列表
我想在ios X64设备上运行,但它没有按预期运行
va_list args;
va_start(args, _cmd);
不再返回指向包含参数的堆栈顶部的指针=/
我怎样才能像在ios armv7/7s中那样,在ios arm64中获取指向参数的指针列表
感谢标准/变量调用是否返回任何类型的堆栈指示取决于实现,不应依赖(例如,特定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都会返回一个适当类型的参数,并移动arg以引用下一个参数
有关更多信息,您可以查看欢迎使用堆栈溢出。您的帖子缺少一些关于您的实现的细节,这些细节可以帮助其他人帮助您。如果你能提供一个简短完整的代码片段来展示错误行为,描述你的输入、结果和预期结果,那么有人会有更好的机会来帮助你。没错,修复了。还有更多的绒毛,所以它会接受注释。va_arg不适用于x64 apple arch可变函数调用,我已经尝试过了,它为我返回了错误的指针=/很有可能是您错误地使用了它。编辑您的问题以添加实际的例程和调用。