do { } while(0) 与 ({ }) 在宏中的优势?
Advantages of do { } while(0) versus ({ }) in a macro?
Stack Overflow 上有很多关于在宏中使用 do { ... } while(0)
的问题,但这有点不同。我明白为什么 do { ... } while(0)
用于在宏扩展中包装多行代码。但是我经常看到另一种形式:({ ... })
.
({ })
形式的优点是它是一个表达式,可以有一个"return value"。它也(主观上)读起来比 do { } while(0)
好。那么为什么不总是使用它呢?在宏中使用 do { } while(0)
有什么好处?
因为({...})
是a GCC extension.
Stack Overflow 上有很多关于在宏中使用 do { ... } while(0)
的问题,但这有点不同。我明白为什么 do { ... } while(0)
用于在宏扩展中包装多行代码。但是我经常看到另一种形式:({ ... })
.
({ })
形式的优点是它是一个表达式,可以有一个"return value"。它也(主观上)读起来比 do { } while(0)
好。那么为什么不总是使用它呢?在宏中使用 do { } while(0)
有什么好处?
因为({...})
是a GCC extension.