为了账号安全,请及时绑定邮箱和手机立即绑定

C+中“结构”与“类型结构”的区别?

C+中“结构”与“类型结构”的区别?

C++ C
慕码人2483693 2019-05-31 13:29:25
C+中“结构”与“类型结构”的区别?在C+中,在以下方面是否有区别:struct Foo { ... };和typedef struct { ... } Foo;
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

在C+中,只有细微的差别。它是C的一个支撑,在C中它起了很大的作用。

C语言标准(C89§3.1.2.3C99§6.2.3,和C11§6.2.3)为不同类别的标识符指定单独的命名空间,包括标签标识符(为struct/union/enum)和普通标识符(为typedef和其他标识符)。

如果你刚才说:

struct Foo { ... };Foo x;

您将得到一个编译器错误,因为Foo仅在标记命名空间中定义。

你必须宣布它为:

struct Foo x;

任何时候,您想要引用Foo,你总要管它叫struct Foo..这会很快变得烦人,所以您可以添加一个typedef:

struct Foo { ... };typedef struct Foo Foo;

现在struct Foo(在标记命名空间中)并且只是普通的Foo(在普通标识符命名空间中)都引用相同的内容,您可以自由声明类型的对象。Foo没有struct关键词。


结构:

typedef struct Foo { ... } Foo;

只是声明和typedef.


最后,

typedef struct { ... } Foo;

声明匿名结构,并创建typedef为了它。因此,使用此构造,它在标记命名空间中没有名称,而在ty胡枝子名称空间中只有一个名称。这意味着它也不能提前宣布。如果要进行前向声明,则必须在标记命名空间中为其命名。.


在C+中,所有struct/union/enum/class声明的行为就好像它们是隐式的。typedef‘ed,只要名称不被同名的另一个声明隐藏,请参见迈克尔·伯尔的回答全部细节。


查看完整回答
反对 回复 2019-05-31
  • 3 回答
  • 0 关注
  • 537 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信