NSLog详解

1.去掉时间项目名等:

定义:

#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n",[[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

NSLog(@"%@",@"Kevin")      Log的结果:

Kevin

2.添加其他的信息

# define MyLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);

MyLog(@"%@",@"Kevin");  Log的结果:

[文件名:/Users/****/Documents/GitHub/*****/******/ViewController.m]

[函数名:-[ViewController viewDidLoad]]

[行号:23]

Kevin

3.参数解释:

3.1 __VA_ARGS__是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。

3.2__FILE__宏在预编译时会替换成当前的源文件名

3.3__LINE__宏在预编译时会替换成当前的行号

3.4__FUNCTION__宏在预编译时会替换成当前的函数名称

4.release 的时候去掉Log

#ifdef DEBUG

#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n",[[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

#else

#define NSLog(...)

#endif

你可能感兴趣的:(NSLog详解)