gpt4 book ai didi

c - #define foo() do { } while (0) 的目的

转载 作者:太空狗 更新时间:2023-10-29 16:25:46 25 4
gpt4 key购买 nike

在浏览 LinCAN 驱动源时,我发现了一些让我感到困惑的宏。

#else /*CONFIG_PREEMPT*/
#define can_preempt_disable() do { } while (0)
#define can_preempt_enable() do { } while (0)
#endif /*CONFIG_PREEMPT*/

我明白了

的用处
do { 
...;
if(condition) break;
...
} while (0);

使用 break 作为一种 throw。我半理解包装一系列功能,如

#define FOO() do { foo(); bar(); } while (0)

避免使用无括号 if 的警告。我知道有时#define 需要“无操作语句”。但为什么是这种特殊的类型?具体来说,空括号,假条件,做...而?一些我不太明白的语法注意事项?

最佳答案

这是一种通用语法,用于通知编译器应将宏视为语句,而不是表达式 ( statements vs expressions )。

在这种情况下,如果您尝试将 can_preempt_disable() 用作表达式,编译器会提醒您。这意味着我们强制编译时检查 can_preempt_disable() 是否用作语句。编译时检查通常是可取的。

关于c - #define foo() do { } while (0) 的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26234629/

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