do { } while(0) 在宏定义中替代或任何其他可能的选项

问题描述 投票:0回答:1

我遇到过一种在 c/c++ 编译中定义多行宏函数的方法,它不符合任何明确的代码约定(并且可能会造成性能缺陷?)。难道只有这样才能达到制作宏功能的目的吗?开发者是否会推出其他方法来做到这一点?

我发现这不是关于 while(0) 的第一个问题,但我正在寻找任何可能的替代方案,也许我应该只编写普通函数。

我看到Linux内核中使用了这种技术,那么我可以说这样写是合法的吗? Linux 存储库搜索

c macros definition conventions
1个回答
0
投票

宏和清晰的代码一开始就不能很好地结合起来。基本上就是这样。

是的,

do ... while(0)
是一个有点笨拙的解决方法。然而,它已经成为如何做你想做的事情的事实上的标准。如果您找到其他一些聪明的替代方案,您可能会使代码不太清晰,因为 C 程序员将
do ... while(0)
视为既定约定。

不用担心性能。任何编译器都可以看到

do ... while(0)
只会执行一次,并且会优化循环。

© www.soinside.com 2019 - 2024. All rights reserved.