宏定义重写NSLog

#define DEBUG
//宏输出函数
#ifdef DEBUG
#define MyLog(fmt, ...)  fprintf(stderr,"[%s:%d] %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:fmt, ##__VA_ARGS__] UTF8String]);//带文件名 行数
#define MyLog(fmt, ...) NSLog((@"%s," "[lineNum:%d]" fmt) , __FUNCTION__, __LINE__, ##__VA_ARGS__); //带函数名和行数
#define MyLog(fmt, ...) NSLog((@"===[lineNum:%d]" fmt), __LINE__, ##__VA_ARGS__);  //带行数
#define MyLog(fmt, ...) NSLog((fmt), ##__VA_ARGS__); //不带函数名和行数
#else
#define MyLog(fmt, ...)
#define MyLog(fmt, ...)
#define MyLog(fmt, ...)
#define MyLog(fmt, ...)
#endif
 只需要在Product ->Scheme->Edit Scheme ->info选择,是release ,还是debug版本即可。如果debug 版本,则答应log,若release版本则不打印。
  release 是发行版本,比debug版本要小一些,他们调用两个不同底层库,debug 包含的信息多,可以断点调试,单步执行,使用使用TRACE/ASSERT等调试输出语句,
但是release 版本不包含调试信息,运行速度比较快。
另外在此处设置的DEBUG 参数可以在下面的路径进行设置:工程->Target->Build Setting ->Preprocessor Macros。默认系统已经给出了DEBUG的参数。如果要增加新的参数,则在哪里进行增加
 
 
——FILE——宏在预编译时,会替换成当前的源文件名字
——LINE——替换成当前的行号
——FUNCTION——替换成当前的函数的名称
——VA—ARGS——可变参数的宏,宏前面加上##作用在于:当当可变参数的个数为0 的时候,这里的##起到把前面多余的,去掉的作用。否则编译出错。

猜你喜欢

转载自blog.csdn.net/lxlzy/article/details/78922462
今日推荐