如何从 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__]
我创建了一个 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__]