#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);
答案 0 :(得分:2)
这应该有效:
#define LogMsg(msg, ...) ((DebugMode)?NSLog(@"<%@:%@:%d>" msg, NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__, ##__VA_ARGS__):NO)
它使用预处理器字符串连接@"<%@:%@:%d>" msg
来获得&#34;组合格式字符串&#34;固定和可变部分,
和preprocessor variadic macros与##__VA_ARGS__
。
已添加:我不认为可以定义一个宏,以便
LogMsg(someObject);
LogMsg(formatString, arg1, arg2, ...);
的工作。
答案 1 :(得分:0)
如此接近!您的宏使用以下调用:
ALog("Test");
NSArray *testArray = @[@"one",@"two"];
ALog("%@", testArray);
编译器将自动连接:
@"%s [Line %d] " "Test"
为:
@"%s [Line %d] Test"