如何正确使用__VA_ARGS__

时间:2014-02-19 07:19:24

标签: ios objective-c

我已经像这样定义了VLog:

#define VLog(s, ...)  NSLog(@"%@", [NSString stringWithFormat:(s), ##__VA_ARGS__])

我知道VLog(@"hello,%d%@", 1, @"a"); __VA_ARGS__已替换为1,@“a”。

然而,VLog(@"hello"); __VA_ARGS__被替换为什么?

如果我像这样定义VLog:

//delete ##
#define VLog(s, ...)  NSLog(@"%@", [NSString stringWithFormat:(s), ##__VA_ARGS__])`
指出

VLog(@"123");错误。

1 个答案:

答案 0 :(得分:0)

如果变量参数为零,则__VA_ARGS__将被替换为空。 ##的特殊之处在于它在这种情况下删除了前面的,,因此编译器不会抱怨“逗号后需要表达式”。没有##定义的宏,即[NSString stringWithFormat:(s), __VA_ARGS__]需要其他参数。