#ifdef DEBUG # define DLog(fmt, ...) NSLog((@"[文件名:%s] " "[函数名:%s] " "[行号:%d] " fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__); #else # define DLog(...); #endif 参数解释: __VA_ARGS__是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。 __FILE__宏在预编译时会替换成当前的源文件名 3.__LINE__宏在预编译时会替换成当前的行号 4.__FUNCTION__宏在预编译时会替换成当前的函数名称 有了以上这几个宏,特别是有了__VA_ARGS__,调试信息的输出就变得灵活多了。 作者:AimLay 链接:https://www.jianshu.com/p/c9df8a15d94e 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。