gpt4 book ai didi

c - 当我们定义宏时,do while(0)有什么用?

转载 作者:行者123 更新时间:2023-11-30 16:37:09 25 4
gpt4 key购买 nike

Possible Duplicates:
Do-While and if-else statements in C/C++ macros
do { … } while (0) — what is it good for?

我正在阅读 Linux 内核,发现了很多这样的宏:

#define INIT_LIST_HEAD(ptr) do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)

为什么他们使用它而不是简单地在 {} 中定义它?

最佳答案

您可以在其后跟一个分号,使其看起来和行为更像一个函数。它也可以正确地与 if/else 子句一起使用。

如果没有 while(0),上面的代码将无法使用

if (doit) 
INIT_LIST_HEAD(x);
else
displayError(x);

因为宏后面的分号会“吃掉”else子句,而上面的代码甚至无法编译。

关于c - 当我们定义宏时,do while(0)有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48095617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com