#define LogMsg(msg) ((DebugMode)?NSLog(@"<%@:%@:%d:%@>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__,msg):NO)
有了这个宏,我可以打印出:
LogMsg(@"Test");
要么
NSArray *testArray = @[@"one",@"two"];
LogMsg(testArray);
我该如何使用宏替换来做同样的事情,该宏替换也将使用两个参数(例如NSLog),并且仍然能够以上面处理的形式打印数组?
例:
NSLog (@"test: %@",test);
最佳答案
这应该工作:
#define LogMsg(msg, ...) ((DebugMode)?NSLog(@"<%@:%@:%d>" msg, NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__, ##__VA_ARGS__):NO)
它使用预处理程序字符串连接
@"<%@:%@:%d>" msg
来获得带有固定和可变部分的“组合格式字符串”,和preprocessor variadic macros和
##__VA_ARGS__
。补充:我认为不可能定义这样一个宏
LogMsg(someObject);
LogMsg(formatString, arg1, arg2, ...);
工作。
关于ios - NSLog宏只能接受一个参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20457925/