[英]What exactly does this syntax do? (in relation to c-style structs)
我理解整个类型在C概念中定义一个结构,这样你就可以避免在使用它时使用关键字struct。 我对这里发生的事情仍然有点困惑。
有人能告诉我这个结构定义正在做的各种事情吗?
typedef struct work_tag {
//contents.
} work_t, *work_p;
它定义了两个typedef,如:
typedef struct work_tag {
//contents.
} work_t;
typedef struct work_tag *work_p;
正如其他答案所说,它定义了两个typedef,一个名为work_t
,引用struct work_tag
,另一个名称work_p
引用struct work_tag*
。
请注意, typedef
不会创建新类型。 它所做的只是为现有类型创建别名 。 struct work_tag
和work_t
不是两个相似的类型,它们是完全相同类型的两个名称。
现在让我们讨论你为什么要这样做。
类型struct work_tag
和struct work_tag*
已经有了非常好的名字。 typedef
为您提供了一种使用单个标识符引用这些类型的方法,但在我看来,这并不是一个优势。 而指针类型的typedef
实际上可能有点危险。 如果要为真正的opaque类型定义名称,使用它的代码不利用它是结构或指针的事实,则typedef
是一个很好的解决方案; 否则,你只是在掩盖重要信息。
我只想写:
struct work {
// contents
};
然后将类型称为struct work
,并将类型指向struct work*
。
但是如果你真的觉得需要为该类型设置单字名称,则不需要为标签和typedef使用不同的名称:
typedef struct work {
// contents
} work;
现在,您可以将类型引用为struct work
或work
,并将指针类型引用为struct work*
或work*
。 (C ++隐式执行此操作; C不执行此操作。)请注意,如果struct work
包含指向另一个struct work
的指针,则不能在定义中使用typedef名称; typedef名称在定义结束前不可见。
想象一下类似变量声明的typedef
。 就像你可以在int a, b
中创建两个int
变量一样,你可以使用typedef int a_t, b_t
在一个typedef
创建两个类型。
它为现有类型分配了两个备用名称:
work_t -> struct work_tag
work_p -> struct work_tag *
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.