宏定义中为什么使用do {...} while (0)

#define IF_CLS_CTRL_RX_BUSY(m)   do {(m) &= ~IF_CTRL_RX_BUSY;} while (0)

在工程代码的代码中,我们经常会遇到 do{ } while(0)这种样式的宏定义,这句代码编译后的效果如下,为了更好的理解,
eg:
宏定义在进行编译时,编译器只会简单得进行替换,do能确保大括号里的逻辑能被执行,而while(0)能确保该逻辑只被执行一次,即与没有循环时一样。

猜你喜欢

转载自blog.csdn.net/qq_40862304/article/details/98078580