C 宏中do{}while(0)与({})的优点?

C 宏中do{}while(0)与({})的优点?,c,macros,C,Macros,关于在宏中使用do{…}while(0),有很多关于堆栈溢出的问题,但这有点不同。我理解为什么do{…}而(0)用于在宏扩展中包装多行代码。但我经常看到另一种形式:({…}) ({})表单的优点是它是一个表达式,可以有一个“返回值”。它(主观上)也比do{}读得好,而(0)。那为什么不经常用呢?在宏中使用do{}而不是(0)有什么好处?因为({…})是。哦,好的。。。注意,在C++11中,您可以使用[&(){/*…*/}()获得类似的效果(就表达式而言),但它仍然有一些缺点,例如无法返回(需要实

关于在宏中使用
do{…}while(0)
,有很多关于堆栈溢出的问题,但这有点不同。我理解为什么
do{…}而(0)
用于在宏扩展中包装多行代码。但我经常看到另一种形式:
({…})


({})
表单的优点是它是一个表达式,可以有一个“返回值”。它(主观上)也比
do{}读得好,而(0)
。那为什么不经常用呢?在宏中使用
do{}而不是(0)
有什么好处?

因为
({…})
是。

哦,好的。。。注意,在C++11中,您可以使用
[&(){/*…*/}()
获得类似的效果(就表达式而言),但它仍然有一些缺点,例如无法
返回
(需要实现rust样式
try!
)或在表达式上使用
decltype
(因为在未计算的上下文中不允许使用lambda)。