使用宏定义时,do { } while(0) 和 ({ }) 有什么优势?

13

在Stack Overflow上有许多关于在宏中使用do { ... } while(0)的问题,但这里有点不同。我明白为什么do { ... } while(0)用于在宏扩展中包装多行代码。但我经常看到另一种形式:({ ... })

({ })形式的优点是它是一个表达式,可以有一个“返回值”。 它也(主观地)比do { } while(0)更易读。 那么为什么它不总是被使用呢? 在宏中使用do { } while(0)有什么优势呢?


注意,在C++11中,您可以使用[&](){/*...*/}()获得类似的效果(就表达式而言),但它仍然有几个缺点,例如无法return(需要实现类似Rust的try!)或在表达式上使用decltype(因为lambda在未评估的上下文中不允许)。 - o11c
1个回答

31

哦,好的...现在我明白了。 - Alex D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接