do{}while(0)
2015-07-13 15:58
239 查看
#define LOG_ERROR(format, ...) \
do { \
SYSTEMTIME _time; \
GetLocalTime(&_time); \
DebugPrint(_T("[%4d-%02d-%02d %02d:%02d:%02d][ERROR][%s,%d] ") format, \
_time.wYear, _time.wMonth, _time.wDay, _time.wHour, _time.wMinute, _time.wSecond, \
_T(__FILE__), __LINE__, ##__VA_ARGS__); \
} while(0)
这里面看不出来while(0)有什么作用,因为里面的代码的确只执行一遍,但是,如果代码比较长,可以方便的用break跳出,不然只能用goto和return了,而goto最好不要用,可能会破坏代码的结构性。而return的话直接函数返回,不利于类似上面的宏进行返回
##__VA_ARGS__代表把LOG_ERROR(format, ...) 中的...变参原封不动的移植到此。VC从VC2005开始支持
do { \
SYSTEMTIME _time; \
GetLocalTime(&_time); \
DebugPrint(_T("[%4d-%02d-%02d %02d:%02d:%02d][ERROR][%s,%d] ") format, \
_time.wYear, _time.wMonth, _time.wDay, _time.wHour, _time.wMinute, _time.wSecond, \
_T(__FILE__), __LINE__, ##__VA_ARGS__); \
} while(0)
这里面看不出来while(0)有什么作用,因为里面的代码的确只执行一遍,但是,如果代码比较长,可以方便的用break跳出,不然只能用goto和return了,而goto最好不要用,可能会破坏代码的结构性。而return的话直接函数返回,不利于类似上面的宏进行返回
##__VA_ARGS__代表把LOG_ERROR(format, ...) 中的...变参原封不动的移植到此。VC从VC2005开始支持
相关文章推荐
- UVA 10820 Send a Table euler_phi功能
- Convert Sorted Array to Binary Search Tree
- INFA调优
- HDU -- 3468 Treasure Hunting (最大流+BFS)
- 使用git对内核version的影响
- python 运行时报错误SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 2
- 网卡远程唤醒-远程开机再配合远程控制
- 新组建整理
- SQL中IN和EXISTS区别和用法
- Android控件——RadioButton和RadioGroup
- 最简单的DLL导出函数隐藏方式
- A+B Problem IV
- hiho一下 第五十四周 (缩点+dfs)
- 让UILabel的文字顶部对齐
- 远程控制篇:在DELPHI程序中拨号上网
- java数据结构和算法------二叉树基本操作
- Alpha Blending
- 软件工具随笔
- vs2013 远程调试 (c++)
- viewpager2左右滑动--钱进