Objective c 忽略#定义宏调用中的逗号

Objective c 忽略#定义宏调用中的逗号,objective-c,macros,Objective C,Macros,我创建了一个特殊的控制台日志函数宏。它可以成功工作,除非参数中有逗号,即使它是另一个表达式的一部分,即不是另一个参数。我认为这是因为宏是在预处理阶段扩展的,所以语义分析还没有发生,无法理解逗号不是另一个参数。我的意思是: #定义日志(消息)[MyLogger logDebug:message with ClassandMethodName:uuu PRETTY_uFunction_uuuuuLineNumber:uuu LINE_uu] +(BOOL)logDebug:(NSString*)带有

我创建了一个特殊的控制台日志函数宏。它可以成功工作,除非参数中有逗号,即使它是另一个表达式的一部分,即不是另一个参数。我认为这是因为宏是在预处理阶段扩展的,所以语义分析还没有发生,无法理解逗号不是另一个参数。我的意思是:

#定义日志(消息)[MyLogger logDebug:message with ClassandMethodName:uuu PRETTY_uFunction_uuuuuLineNumber:uuu LINE_uu]

+(BOOL)logDebug:(NSString*)带有classandmethodname:(const char*)name lineNumber:(int)lineNumber的消息

这些工作:

FANCY_LOG(@"Hello world");
FANCY_LOG([NSString stringWithFormat:@"Hello!"]);
这不起作用:

FANCY_日志([NSString stringWithFormat:@“Hello%@!”,planet])

虽然逗号显然是
NSString
表达式的一部分,但宏将其解释为另一个参数,但我得到以下错误:

为宏调用之类的函数提供了太多参数

以下是我尝试过但未成功的方法(以及这些方法的变体):


你做错了。首先,有很多很好的现成解决方案,因此您不必重新发明车轮(不记得了,但我认为
CocoaLumberjack
是最好的)

您的记录器可以如下所示(我对Objective C有点生疏):


谢谢你的回复。我没有试图传递多个字符串作为日志参数,我只是试图传递一个[NSString…]方法调用,但它将逗号解释为另一个参数(参见上面的示例)@JosueEspinosa您试图做的是不可能的,预处理器总是将逗号解释为宏参数分隔符
#define FANCY_LOG(...) [MyLogger logDebug:##__VA_ARGS___ withClassAndMethodName: __PRETTY_FUNCTION__ lineNumber: __LINE__];
#define FANCY_LOG(message) [MyLogger logDebug:#message withClassAndMethodName: __PRETTY_FUNCTION__ lineNumber: __LINE__];
+(void) function:(char *)methodName
          inLine:(int)line 
            logs:(NSString *)format, ...;

 ...

#define FANCY_LOG(...) [MyLogger function: __PRETTY_FUNCTION__ \
                                   inLine: __LINE__ \
                                     logs: __VA_ARGS__]

// then usage:
FANCY_LOG(@"Hello %@!", planet);