打印

宏定义为什么要用do while(0)括起来啊?

[复制链接]
1630|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CarterERO|  楼主 | 2024-3-18 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
都是执行一次,有没有do while(0)有什么区别啊?

使用特权

评论回复
沙发
公羊子丹| | 2024-3-22 19:09 | 只看该作者
在哪看到的

使用特权

评论回复
板凳
tifmill| | 2024-4-2 19:02 | 只看该作者
如果不使用do { ... } while (0)包裹,那么在宏定义中包含多条语句时,如果忘记在每条语句后加分号,就会导致编译错误。

使用特权

评论回复
地板
lihuami| | 2024-4-4 10:44 | 只看该作者
如果宏定义中包含多个语句,而你在宏的调用中只期望一个语句,那么不使用do { ... } while (0)可能会导致语法错误。使用do { ... } while (0)可以确保宏作为一个单独的语句块来处理,即使它包含多个语句。

使用特权

评论回复
5
saservice| | 2024-4-4 12:01 | 只看该作者
如果宏定义中只有一条语句,那么在使用宏时,末尾不需要加分号。但如果宏定义中有两条或更多语句,则需要用大括号包围起来,以避免在宏扩展时因为悬挂分号而导致的语法错误。

使用特权

评论回复
6
cemaj| | 2024-4-4 14:13 | 只看该作者
使用do { ... } while (0)包裹宏定义是一种良好的编程习惯,它可以防止错误

使用特权

评论回复
7
nomomy| | 2024-4-4 16:03 | 只看该作者
else 与外部的 if 语句关联,而不是内部的 if 语句。使用 do { ... } while(0) 可以避免这个问题。

使用特权

评论回复
8
lzbf| | 2024-4-4 18:06 | 只看该作者
使用do { ... } while (0)可以明确地表明这是一个语句块,使得代码更易于阅读和理解。

使用特权

评论回复
9
pentruman| | 2024-4-4 20:10 | 只看该作者
使用do {...} while (0)可以清晰地表明这是一个宏定义,有助于阅读和维护代码。

使用特权

评论回复
10
eefas| | 2024-4-4 22:12 | 只看该作者
如果你在一个if或else语句中使用宏,而该宏包含多个语句,不使用do { ... } while (0)会导致语法错误。使用do { ... } while (0)可以确保宏与if/else等结构兼容。

使用特权

评论回复
11
sesefadou| | 2024-4-5 20:38 | 只看该作者
当宏定义包含多个语句时,如果不使用do { ... } while (0)结构,可能会导致语法错误。

使用特权

评论回复
12
xiaoyaodz| | 2024-4-5 22:35 | 只看该作者
在某些情况下,可能需要清理代码中的空白字符或注释。使用do while(0)括起来,可以确保这些清理操作只被预处理器执行,而不会影响实际编译的代码。

使用特权

评论回复
13
sdlls| | 2024-4-6 11:29 | 只看该作者
C语言中,if语句的else部分总是与最近的未匹配的if匹配。如果不使用do { ... } while (0)包裹,就可能出现悬挂else的问题。

使用特权

评论回复
14
averyleigh| | 2024-4-6 13:25 | 只看该作者
使用 do { ... } while(0) 可以使宏的定义更加清晰和易于维护,因为它提供了一种结构化的方式来处理多个语句。

使用特权

评论回复
15
geraldbetty| | 2024-4-6 15:37 | 只看该作者
while (0)确保了宏定义中的代码块只会执行一次,即使宏被用于一个单独的语句中,也不会产生额外的控制流影响。

使用特权

评论回复
16
weifeng90| | 2024-4-6 16:27 | 只看该作者
源程序发上来看看呢

使用特权

评论回复
17
primojones| | 2024-4-6 21:14 | 只看该作者
宏定义可以被用来定义常量、函数、绝缘符等。

使用特权

评论回复
18
mikewalpole| | 2024-4-7 10:17 | 只看该作者
使用do { ... } while (0)结构可以确保宏定义在使用时保持独立性,不会与其他语句产生副作用。例如,当宏定义包含break、continue或return语句时,如果不使用do { ... } while (0)结构,可能会导致程序行为不符合预期。

使用特权

评论回复
19
gygp| | 2024-4-7 12:24 | 只看该作者
在C语言中,宏是在预处理器阶段进行文本替换的,如果不使用这种结构,多个语句的宏可能导致编译错误。

使用特权

评论回复
20
chenci2013| | 2024-4-7 14:38 | 只看该作者
在某些情况下,可能在宏定义中使用条件编译,而do while(0)可以确保即使在未满足条件的情况下,宏定义的其余部分也会被预处理器展开。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

242

帖子

0

粉丝