我已经像这样定义了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");
错误。
答案 0 :(得分:0)
如果变量参数为零,则__VA_ARGS__
将被替换为空。 ##
的特殊之处在于它在这种情况下删除了前面的,
,因此编译器不会抱怨“逗号后需要表达式”。没有##
定义的宏,即[NSString stringWithFormat:(s), __VA_ARGS__]
将需要其他参数。