我看过一些多行的 C 宏,它们被包裹在 do/while(0) 循环中,例如:
#define FOO \ do { \ 这里做一些事情 \ 再做一些事情 \ } while (0)
相较于使用基本块:
#define FOO \ { \ 这里做一些事情 \ 再做一些事情 \ }
这样写有什么好处(如果有的话)?这个问题可能与以下内容重复: 当我们定义一个宏时,do while(0) 有什么用处? 为什么 C/C++ 宏中有时会出现无意义的 do/while 和 if/else 语句? do { … } while (0) 有什么用处?
#define FOO \ do { \ 这里做一些事情 \ 再做一些事情 \ } while (0)
相较于使用基本块:
#define FOO \ { \ 这里做一些事情 \ 再做一些事情 \ }
这样写有什么好处(如果有的话)?这个问题可能与以下内容重复: 当我们定义一个宏时,do while(0) 有什么用处? 为什么 C/C++ 宏中有时会出现无意义的 do/while 和 if/else 语句? do { … } while (0) 有什么用处?
({...})
构造是GCC扩展,不被ISO标准C支持。 - Nate Eldredge