我有一个相当简单的宏,我想用它来记录消息。宏:
#define LogDebug(tag, fmt, ...) [MyLogger logDebug:[NSString stringWithFormat:fmt, ##__VA_ARGS__] \
function:NSStringFromSelector(_cmd) file:@__FILE__ line:__LINE__ tag:tag];
我称之为:
LogDebug(@"tag", @"message");
问题:在@"tag"
开始时,我得到Expected ']'
,其中Xcode指向宏调用中的@
符号(不是定义)。
重要提示:如果我删除了tag
变量,那么一切都很完美:
#define LogDebug(fmt, ...) [MyLogger logDebug:[NSString stringWithFormat:fmt, ##__VA_ARGS__] \
function:NSStringFromSelector(_cmd) file:@__FILE__ line:__LINE__ tag:@"tag"];
和
LogDebug(@"message");
有什么想法吗?
答案 0 :(得分:2)
名为tag
的宏参数会干扰logDebug
以相同方式命名的参数 - tag
。将宏更改为:
#define LogDebug(tg, fmt, ...) [MyLogger logDebug:[NSString stringWithFormat:fmt, ##__VA_ARGS__] \
function:NSStringFromSelector(_cmd) file:@__FILE__ line:__LINE__ tag:tg];
(即LogDebug(tag, fmt, ...)
至LogDebug(tg, fmt, ...)
和tag:tag
至tag:tg
)。