标签: c macros
关于在宏中使用do { ... } while(0),有很多关于Stack Overflow的问题,但这有点不同。我理解为什么do { ... } while(0)用于在宏扩展中包装多行代码。但我经常看到另一种形式:({ ... })。
do { ... } while(0)
({ ... })
({ })形式的优势在于它是一个表达式并且可以具有“返回值”。它(主观地)也比do { } while(0)读得更好。那为什么不总是使用它?在宏中使用do { } while(0)有什么好处?
({ })
do { } while(0)
答案 0 :(得分:30)
因为({...})是a GCC extension。
({...})