2015-02-06 32 views
0

是很直,在x86的建立,我可以做到这一点:通过使抓住一个可变参数函数的参数在iOS的64

static id method(id)(id self, SEL _cmd, ...) { 
    va_list args; 
    va_start(args, _cmd); 

ARGS,你知道会包含一个指向栈: ARGS + =尺码类型);

我可以迭代args的完整列表。

保持简短,args将包含一个带有指向我的参数的指针的列表。

我想这在IOS X64设备的工作,但预期它不工作,

va_list args; 
va_start(args, _cmd); 

不返回一个指向包含参数堆栈的顶部了=/

如何我可以像ios armv7/7s一样获取ios arm64参数的指针列表吗?

感谢

+1

欢迎来到堆栈溢出。您的文章缺少一些关于您的实施的细节,可以帮助他人为您提供帮助。如果您可以提供展示错误行为的简短*完整*代码段,描述您的输入,结果和预期结果,则有人将有更好的机会为您提供帮助。 – 2015-02-06 20:30:05

回答

2

无论stdarg头文件/可变参数调用返回的任何一种堆栈指示的是实现相关的,不应该在(如特定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每次调用返回相应类型的参数和运动参数传递给引用的一个参数。

欲了解更多信息,你可以检查出stdarg.h wikipedia page

+0

确实,修正。更多的绒毛,所以它会接受评论。 – 2015-02-06 21:24:15

+0

va_arg不能在x64苹果拱形可变函数调用上工作,我已经尝试过了,它返回了坏指针对我来说=/ – 2015-02-07 04:25:06

+0

赔率很好,那么你错误地使用它。编辑您的问题以添加实际例程及其调用。 – 2015-02-07 05:22:40

相关问题