//第一种
#ifdef DEBUG#define CLog(format, ...) NSLog(format, ## __VA_ARGS__)#else#define CLog(format, ...)#endif
// 第二种
#ifdef DEBUG# define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);#else# define DLog(...);#endif
参数解释:
__VA_ARGS__是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
__FILE__宏在预编译时会替换成当前的源文件名
3.__LINE__宏在预编译时会替换成当前的行号
4.__FUNCTION__宏在预编译时会替换成当前的函数名称
有了以上这几个宏,特别是有了__VA_ARGS__,调试信息的输出就变得灵活多了。

本文详细介绍了C语言中用于调试的日志宏定义及使用方法,包括如何根据不同的调试需求选择合适的日志输出方式,并解释了__VA_ARGS__、__FILE__、__FUNCTION__、__LINE__等关键宏的作用。

764

被折叠的 条评论
为什么被折叠?



