参数';Objective-C中的寄存器或堆栈
我对一个问题感到困惑。请看一个例子:参数';Objective-C中的寄存器或堆栈,objective-c,c,Objective C,C,我对一个问题感到困惑。请看一个例子: -(void)DIYLog:(NSString *)format, ... { NSLog(...); } 这只是一个有趣的例子。我们都知道不能将“…”作为NSLog的参数传递。所以我很好奇如何将一个“可变参数”传递给另一个。 我已经知道参数是通过寄存器或堆栈传递的,但关键是,如何在Objective-C或C中实现它 我想我让你误会了。NSLog只是一个需要解释的示例。让我再做一个。 它是关于将参数传递给id objc\u msgSend(id s
-(void)DIYLog:(NSString *)format, ...
{
NSLog(...);
}
这只是一个有趣的例子。我们都知道不能将“…”作为NSLog的参数传递。所以我很好奇如何将一个“可变参数”传递给另一个。
我已经知道参数是通过寄存器或堆栈传递的,但关键是,如何在Objective-C或C中实现它
我想我让你误会了。NSLog只是一个需要解释的示例。让我再做一个。 它是关于将参数传递给id objc\u msgSend(id self,SEL op,…)
-(void)DIY_msgSend:(id)target selector:(SEL)op params:(id)param, ...
{
objc_msgSend(target, op, ...);
}
因此,关键是,我如何将这些变量参数传递给另一个也需要变量参数的函数。可以从变量参数创建C
va_列表
类型,并传递给接受va_列表
参数的函数/方法。例如:
- (void)logFormat:(NSString *)format, ...
{
va_list args;
va_start(args, format);
NSLogv(format, args);
va_end(args);
}
但是,没有可移植的方法可以按照您的意愿将
va_列表
传递给标准的可变函数。可以从可变参数创建Cva_列表
类型,并将其传递给接受va_列表
参数的函数/方法。例如:
- (void)logFormat:(NSString *)format, ...
{
va_list args;
va_start(args, format);
NSLogv(format, args);
va_end(args);
}
但是,没有可移植的方法可以将
va_列表
传递给标准的变量函数。我根本不理解你的问题,你能更明确一点,写更多的例子吗?我想问题是“如何编写一个方法,将变量参数传递给另一个函数,如NSLog?”参数是在堆栈上传递还是在寄存器中传递完全是目标体系结构和传递参数的实现细节……这不是我需要的东西。:)我一点也不理解你的问题,你能更明确一点,写更多的例子吗?我想问题是“我怎样才能写一个方法,用变量参数将这些参数传递给另一个函数,比如NSLog。”参数是在堆栈上传递还是在寄存器中传递完全是目标体系结构和传递参数的实现细节……这不是我需要的东西。:)