摘要:
在linux内核代码中,有这样的宏定义:#define DUMP_WRITE(addr,nr) do{ memcpy(bufp,addr,nr); bufg+=nr; }while(0)这个宏定义意味着引用这个宏操作时会执行循环体一次,但为什么要定义成这样的怪形式呢?我们看看其他几种形式的宏定义:#define DUMP_WRITE(addr,nr) memcpy(bufp,addr,nr); bufp+=nr;这种宏定义行不行?我们把这个宏放到一个语境中:if (addr) DUMP_WRITE(addr,nr);else do_something_else();结果发现编译会出错,为什么? 阅读全文