macros - 在宏中,{ } while(0) 与( { }) )的优势?

  显示原文与译文双语对照的内容
0 0

有很多提问Stack Overflow关于使用 do { ... } while(0)在宏中,而这是有一些不同。 我明白你为什么 do { ... } while(0)是用来封装多个代码行在宏扩展。 但还有另一种形式我经常看到: ({ ... }).

({ })形式的优点在于它是一个表达式,也可以是一个" 返回值" 。 它还读取比( 主观) do { } while(0). 那么为什么不一直是这样使用? 有什么长处与使用 do { } while(0)在宏代替?

时间:原作者:2个回答

0 0

因为 ({...})GCC扩展

原作者:
0 0

首先你应当再次读取那" do " 结构使用: 做{ 。。。? } while ( 0 ) —有什么用? 究其原因simmilar为什么我们使用" const " 单词。 为了避免我们欠的债 也会提高的本地作用域创建变量。 这你是知道的 作为Quentin提到( {} ) 是GCC扩展,单词越来越少。 但它可能不会避免if ( == ) macro( ) else错误?

内联functions( ~static内联) 具有单元范围,宏不。 h 中可以定义宏,用于许多单位+ 内联100% guaranted 。 但是在oposite为inline,我认为值宏调用应返回就是修改参数或某些函数。 宏做{} while( ) 具有优势内联和还可以" 返回值" ^^的方式。 所以不知道何谓单词" 优势" & " 返回值" for ( {} )? im可疑你wa不是强制某种错误使用( {} ) 还是什么?

原作者:
...