【问题标题】:Objective-C: Expected ']' in macroObjective-C:宏中的预期']'
【发布时间】:2017-01-17 13:28:18
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: ios objective-c macros


    【解决方案1】:

    名为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)。

    【讨论】:

    • 太棒了,谢谢。计算机科学错误的经典介绍:)
    • 宏是邪恶的,是的。
    猜你喜欢
    • 1970-01-01
    • 2017-04-19
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多