我们可以在C中使用相同结构中的两个或更多typedef吗?
示例:
typedef struct word {
char *letter;
struct word *next;
} Word;
typedef struct word SequenceL;
typedef Word Something;
答案 0 :(得分:5)
typedef
只是现有类型的替代名称的声明。没有什么可以阻止多个typedef为同一现有类型声明不同的替代名称。
也没有什么可以阻止typedef
引用另一个typedef
(假设编译器可以看到第一个)。
所以,在
typedef struct foo Foo;
typedef Foo AnotherFoo;
Foo
和AnotherFoo
都是struct foo
的替代名称。
答案 1 :(得分:2)
当然可以。 Typedef实际上并没有在运行时更改任何内容。关键是,你没有"用更好的名字取代结构词的声明"而是"创建一个新的声明,就像它是结构词"
答案 2 :(得分:2)
是的,允许。以类型int为例,它是一种基本的基本类型。通常我们使用typedef来提供更多的上下文名称。像这样的东西(来源维基百科:http://en.wikipedia.org/wiki/Typedef#Usage_examples)
typedef int km_per_hour; typedef int points;
如您所见,类型相同但仍允许以不同方式键入。同样的规则可以应用于更复杂的结构。希望你得到我想说的话。
答案 3 :(得分:0)
嗯,以前的答案是“错误的”。关键不在于它是否有意义(当然,它确实并且应该没有问题)。真正的重点是,按照标准,这是否是有效 C。
事实证明,C改变了主意。
在C99之前无效,并在C11开始接受。
Jonathan Leffler's answer完美地描述了这一点。