如何从Objective-C宏调用variadic方法?

时间:2015-11-13 16:37:04

标签: objective-c macros variadic-functions

我创建了一个variadic方法的va_list版本:

+(void)myFunc:(NSString *)message args:(va_list)args;

并创建了调用上述函数

的宏TESTLOG
#define TESTLOG(x,...) [MyExample myFunc:(x), ##__VA_ARGS__]

问题是,当我尝试调用TESTLOG宏时,我收到错误:

TESTLOG("test");
TESTLOG(@"test",@"test1");
  

预期表达

我如何解决这个问题?我尝试将args:(va_list)args替换为...它正在运行,但在我的情况下,我需要使用va_list和宏。

我认为我的问题在于宏中的定义。

1 个答案:

答案 0 :(得分:1)

您不能将__VA_ARGS__宏与va_list参数一起使用。您的Objective-C方法需要定义为:

+ (void)myFunc:(NSString *)message, ... ;

然后您的宏可以是:

#define TESTLOG(x,...) [MyExample myFunc:(x), __VA_ARGS__]