【问题标题】:Can we have two or more typedef from the same struct in C?我们可以从 C 中的同一个结构中获得两个或多个 typedef 吗?
【发布时间】:2015-06-07 02:32:09
【问题描述】:

我们可以在 C 中从同一个结构中获得两个或多个 typedef 吗?

例子:

typedef struct word {
  char *letter;
  struct word *next;
} Word;
typedef struct word SequenceL;
typedef Word Something;

【问题讨论】:

  • 显然是yes
  • 是的,这三个都可以共存。
  • 真正的问题是为什么?单个typedef 可能会令人困惑,因此拥有多个typedef 将是...... ...

标签: c


【解决方案1】:

typedef 只是对现有类型的替代名称的声明。没有什么可以阻止多个 typedef 为相同的现有类型声明不同的替代名称。

也没有什么可以阻止 typedef 引用另一个 typedef(假设编译器可以看到第一个)。

所以,在

 typedef struct foo Foo;
 typedef Foo AnotherFoo;

FooAnotherFoo 都是 struct foo 的替代名称。

【讨论】:

    【解决方案2】:

    当然可以。 Typedef 在运行时实际上并没有改变任何东西。关键是,您不是“用更好听的名称替换结构词的声明”,而是“创建一个新的声明,就像它是结构词一样”

    【讨论】:

    • 这个答案令人困惑,这里不适合引用宏。
    【解决方案3】:

    是的,这是允许的。以 int 类型为例,它是基本的原始类型。我们经常使用 typedef 来给出更多的上下文名称。像这样的东西(来源维基百科:http://en.wikipedia.org/wiki/Typedef#Usage_examples

    typedef int km_per_hour ; typedef int 点;

    如您所见,类型相同,但仍允许使用不同的 typedef。相同的规则可以应用于更复杂的结构。希望你能明白我想说的。

    【讨论】:

      【解决方案4】:

      嗯,之前的答案是“错误的”。关键不在于它是否有意义(当然它确实并且应该没有问题)。真正的重点是这是否是有效 C,按照标准。

      事实证明,C 改变了主意。

      它在 C99 之前是无效的,并在 C11 以后被接受。

      Jonathan Leffler's answer 完美地描述了这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        相关资源
        最近更新 更多