网站建设匠人匠心科技,做网站办什么类型营业执照,徐州网站建设网站制作,陕西省建设工程施工许可证查询网站前言#xff1a;1)输出日志是会大量损耗系统性能2)输出的信息很容易会被截取到#xff0c;导致信息不安全。所以我们会在发行版(Release)取消所有的Log。如果一行一行地去注释掉Log#xff0c;显然不是一个明确的选择。因此我们可以使用宏去自定义Log输出。最简单的一个例子…前言1)输出日志是会大量损耗系统性能2)输出的信息很容易会被截取到导致信息不安全。所以我们会在发行版(Release)取消所有的Log。如果一行一行地去注释掉Log显然不是一个明确的选择。因此我们可以使用宏去自定义Log输出。最简单的一个例子#ifdefDEBUG#define GCLog(fmt, ...) NSLog((fmt), ##__VA_ARGS__);#else#define GCLog(...);输出当前方法名#define GCMethod(...) NSLog(%s, __func__);使用方法GCLog(sdf);使用宏自定义输出还可以很方便地管理输出的内容#ifdef DEBUG# define DLog(fmt, ...) NSLog(([文件名:%s]\n [函数名:%s]\n [行号:%d] \nfmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);#else # define DLog(...);#endif摘自http://blog.csdn.net/remote_roamer/article/details/7107320参数解释1) __VA_ARGS__ 是一个可变参数的宏很少人知道这个宏这个可变参数的宏是新的C99规范中新增的目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于当可变参数的个数为0时这里的##起到把前面多余的,去掉的作用,否则会编译出错, 你可以试试。2) __FILE__ 宏在预编译时会替换成当前的源文件名3) __LINE__宏在预编译时会替换成当前的行号4) __FUNCTION__宏在预编译时会替换成当前的函数名称有了以上这几个宏特别是有了__VA_ARGS__ 调试信息的输出就变得灵活多了。摘自http://blog.chinaunix.net/uid-22878837-id-2110544.html博文作者GarveyCalvin本文版权归作者和博客园共有欢迎转载但须保留此段声明并给出原文链接谢谢合作