【问题标题】:Why define a macro insted of using directly?(Please see description for what exactly i want)为什么要定义一个直接使用的宏?(请参阅我想要的描述)
【发布时间】:2013-12-19 09:34:38
【问题描述】:

我正在遍历 linux 内核代码。我找到了一个定义为#define __async_inline __always_inline 的宏。我搜索了__always_inline,找到了以下语句#define __always_inline inline。我的问题是为什么他们需要这样做?他们可以直接使用inline而不是这个宏吗?

【问题讨论】:

  • 显然inline 仅来自C99 语言版本的标准,我认为他们这样做是为了避免在代码库中对关键字进行硬编码。
  • 可能在未来,他们可能会为宏添加更多功能/属性,有时还会出现可移植性问题。

标签: c macros linux-kernel


【解决方案1】:

代码是这样写的:

#ifdef CONFIG_HAS_DMA
#define __async_inline
#else
#define __async_inline __always_inline
#endif

这是不言自明的。如果未定义 CONFIG_HAS_DMA__async_inline 将被 inline 替换。

【讨论】:

【解决方案2】:

这是参数化代码的常用方法,将某种决定(在这种情况下,使用inline)移动到一个地方,以便该决定改变(无论出于何种原因:不同的编译器,不同的配置选项,不同的架构),只有一个地方可以改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多