您的位置:首页 > 其它

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开始支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: