如何从 Objective-C 宏调用可变参数方法?

How call to variadic method from Objective-C macro?

我创建了一个 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");

Expected expression

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

我认为我的问题与宏中的定义有关。

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

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

那么你的宏可以是:

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