OC:
#ifdef DEBUG
#define STLog(FORMAT,...) fprintf(stderr, "打印所在文件:%s\t所在行数:%d\t打印内容:%s\n",[[[NSString stringWithFormat:@"%s",__FILE__] lastPathComponent] UTF8String],__LINE__,[[NSString stringWithFormat: FORMAT,##__VA_ARGS__] UTF8String])
#else
#define STLog(...)
swift:
/// 自定义打印,打印包括函数所在的文件以及对应的行号和消息可以使用command+shift+0快速打开文件 再使用command+L快速定位到行号
///
/// - Parameters:
/// - message: 所打印的数据 泛型
/// - file: 函数所在的文件
/// - line: 函数所在的行号
func UMLog<T>(message: T, file: String = #file, line: Int = #line) {
// DEBUG模式下才打印
#if DEBUG
print("所在文件:\((file as NSString).lastPathComponent)+所在行数:\(line)+对应消息:\(message)")
#endif
}
部分参数说明:
1)stderr:stderr -- 标准错误输出设备
stdout -- 标准输出设备 (printf("..")) 同 stdout。
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。
2)VA_ARGS:是一个可变参数的宏,宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多
余的","去掉的作用,否则会编译出错,
- FILE 宏在预编译时会替换成当前的源文件名
- LINE宏在预编译时会替换成当前的行号
- FUNCTION宏在预编译时会替换成当前的函数名称