对于调试日志,我经常看到和使用类似以下的内容:
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
但我在许多地方看到第二个#define
被替换为
#define DLOG(fmt, args...) do {} while (0)
特别地,有这个答案,以及对于同一个问题的这个其他答案上的评论表明,问题可能出现在以下情况中:
if (condition)
DLOG("foo");
尽管我的快速测试表明,单独一行的分号可以作为条件语句中的空操作语句。问题:使用`nothing`和`do {} while (0)`哪个更好?如果有,请说明原因。还有其他更好的方法吗?