#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);
  • 我不想为此使用3rd Party Class并使用宏解决上述问题。
  • 最佳答案

    这应该工作:

    #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/

    10-11 19:47