首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typedef结构问题

Typedef结构问题
EN

Stack Overflow用户
提问于 2010-10-02 01:51:34
回答 6查看 520关注 0票数 3

我为什么要这样做呢?

代码语言:javascript
复制
typedef struct Frame_s
{
int x;
int y;
int z;
} Frame_t;

另外,如果我想创建一个对象,我应该使用Frame_s还是Frame_t?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-02 01:54:37

您将使用Frame_t

对于typedef,您可以说Frame_tstruct Frame_s是完全相同类型的。

所以这些是等价的句子:

代码语言:javascript
复制
// 1
Frame_t f;

// 2
struct Frame_s f;

我将使用:

代码语言:javascript
复制
typedef struct
{
   int x;
   int y;
   int z;
} Frame_t;

并且总是像这样声明我的变量:

代码语言:javascript
复制
Frame_t f1, f2, f3;

混淆通常来自您在C++代码片段中使用这句话的地方。如果您将C++与该typedef一起使用,则可以使用:

代码语言:javascript
复制
// 1
Frame_t f;

// 2
Frame_s f;

但是如果您使用普通的C编译器,那么//2是无效的。

票数 6
EN

Stack Overflow用户

发布于 2010-10-02 01:55:52

要么使用struct Frame_s,要么使用Frame_t

通常,您这样做是为了使用定义了类型的名称Frame_t,而不必在引用该类型时编写struct

除了Frame_tstruct Frame_s短之外,没有什么真正的区别。

票数 2
EN

Stack Overflow用户

发布于 2010-10-02 05:18:07

在其他回复中尚未提到的typedef的另一个方面是,它保留标识符,从而可以避免混淆。如果你这样做一个正向声明

代码语言:javascript
复制
typedef struct Frame Frame;

您可以避免某些代码可能使用相同名称的Frame,例如变量或函数。

一个非常糟糕的传统例子是POSIX中的"sys/stat.h“:它定义了一个struct stat和一个函数stat

代码语言:javascript
复制
int stat(const char *path, struct stat *buf);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3841791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档