在后台程序运行出问题时,详尽的日志是抓错不可缺少的帮手,这里提供一个能自动记录日志触发点文件名、行号、函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__ 先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息 ...
分类:
编程语言 时间:
2018-06-17 19:02:58
阅读次数:
285
作为第一篇,首先要说一下C++11与C99的兼容性。 C++11将 对以下这些C99特性的支持 都纳入新标准中: 1) C99中的预定义宏 2) __func__预定义标识符 3) _Pragma操作符 4) 不定参数宏定义以及__VA_ARGS__ 5) 宽窄字符串连接 这些特性并不像语法规则一样 ...
分类:
其他好文 时间:
2018-02-04 00:28:56
阅读次数:
552
#include <strsafe.h>
TCHAR pOutBuf[1024] = {};
#define PRINTF(...) StringCchPrintfW(pOutBuf,1024,__VA_ARGS__); Wr
分类:
编程语言 时间:
2017-12-13 14:45:39
阅读次数:
136
在PCH文件中定义如下宏 #if DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #define debugMethod() NSLog(@"%s",__func__)、 #else #define NSLog(...) #define debugMethod ...
分类:
移动开发 时间:
2017-11-22 10:22:38
阅读次数:
189
http://velep.com/archives/581.html http://www.cnblogs.com/alexshi/archive/2012/03/09/2388453.html ...
分类:
其他好文 时间:
2017-10-07 20:47:43
阅读次数:
145
#include #include #include #include #define cal(...)(Vec){__VA_ARGS__} const int BUF = 10000002; char Buf[BUF], *buf = Buf; inline void read (int &now... ...
分类:
其他好文 时间:
2017-08-14 22:17:32
阅读次数:
165
C99中规定宏可以像函数一样带有可变参数,实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个英文输入法下的句号)。这样预定义宏__VA_ARGS__就可以被用在替换部分中,以表明省略号代表什么。 eg: #include<stdio.h>#define Variable_Macro(.. ...
分类:
其他好文 时间:
2017-07-03 22:32:03
阅读次数:
258
简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉,否则会编译出错。 2) __FILE__ 宏在 ...
分类:
移动开发 时间:
2017-06-21 16:50:14
阅读次数:
228
日子明确信息 #ifdef DEBUG # define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else # define DLog(...) #end ...
分类:
移动开发 时间:
2017-05-08 12:35:46
阅读次数:
263