【问题标题】:Why make the difference betwen typedef and defining structure in my case?(See description for what i want)在我的案例中,为什么要区分 typedef 和定义结构?(请参阅我想要的描述)
【发布时间】:2013-12-19 11:04:23
【问题描述】:

我正在浏览 Linux 内核源代码。我发现了以下陈述,

#ifdef CONFIG_REFCOUNT
typedef struct {
        int counter;
} ato_unchecked_t;
#else
typedef int ato_unchecked_t;
#endif

拥有一个包含一个 int 成员或仅包含一个 int 成员的结构的目的是什么? 像这样的 typedef'd int ?

【问题讨论】:

  • 所以你的问题是不是 "什么是 ...", 但是 "为什么要让..."?

标签: c struct linux-kernel typedef


【解决方案1】:

拥有结构的唯一好处是,如果定义了CONFIG_REFCOUNT 的所有代码都被指定为用户可自定义的。可以将更多字段添加到结构中,这些字段在逻辑上相关并用于用户特定的功能。

【讨论】:

  • 你的回答很有道理
【解决方案2】:

代码 sn-p 使用预处理器 - 如果定义了 #define CONFIG_REFCOUNT,则解析 ato_unchecked_t 的结构定义。如果未定义 CONFIG_REFCOUNT,则 typedef 创建类型 ato_unchecked_t(它的基础类型是 int)。

总而言之,#ifdef 保证存在ato_unchecked_t 类型的定义。一个可能的定义是结构体,另一个定义是 int。

【讨论】:

  • 我知道,但我们为什么需要它?
  • 不看代码很难说。我认为使用结构存储 int 没有任何优势。可能需要 #ifdef 来修改遗留代码或可选使用某些库代码。
【解决方案3】:

我现在明白你的问题了。引用计数需要它 - 存储对某些资源或对象的引用数量。这可以被垃圾收集算法使用。结构内的变量存储引用的计数。创建新引用时,变量count 会递增,反之亦然。例如,有关详细信息,请参阅this article。预处理器指令指示,如果启用此模式

【讨论】:

  • 我知道这个,但是为什么我们需要这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
相关资源
最近更新 更多