Objective-C:宏

时间:2017-01-17 13:28:18

标签: ios objective-c macros

我有一个相当简单的宏,我想用它来记录消息。宏:

#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");

有什么想法吗?

1 个答案:

答案 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:tagtag:tg)。