gpt4 book ai didi

c - Linux 内核定义无处不在

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

在linux的内核中,我们可以在linux/sched.h中找到这段代码,当我看到它时,我心中产生了一些疑问:

  1. 为什么使用define来创建函数?为什么不使用普通的return-type function-name(par1, par2) {}样式?
  2. do {} while(0) 有什么意义?

    #define set_special_state(state_value)  
    do {
    unsigned long flags;
    raw_spin_lock_irqsave(&current->pi_lock, flags);
    current->state = (state_value);
    raw_spin_unlock_irqrestore(&current->pi_lock, flags);
    } while (0)
    #endif

最佳答案

这不是一个“函数”,而是一个预处理器宏。

  1. 有时必须使用宏来完成 C 语言本身不支持的事情(通常是生成代码)。但这看起来不像是其中一种情况,并且可能应该是一个静态内联函数。 Pergaps Git 历史可以解释为什么它是这样的。

  2. do { ... } while (0) 是一种吞掉分号的常用方法,该方法在调用类似 C 函数的宏之后调用。

关于c - Linux 内核定义无处不在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51757034/

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