首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要定义一个_struct,然后在没有_的情况下对其进行类型选择呢?

为什么要定义一个_struct,然后在没有_的情况下对其进行类型选择呢?
EN

Stack Overflow用户
提问于 2014-04-01 13:33:25
回答 4查看 124关注 0票数 0

在浏览libgphoto2存储库时,我看到了以下内容:

代码语言:javascript
复制
struct _PTPObjectHandles {
    uint32_t n;
    uint32_t *Handler;
};
typedef struct _PTPObjectHandles PTPObjectHandles;

为什么有人要这样做,而不只是调用结构PTPObjectHandles和省略整个typedef行?

编辑:我可能应该注意到,代码中再也没有使用_PTPObjectHandles

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-01 13:40:58

这样做最常见的原因只是为了缩短输入时间,使其看起来像“真正的数据类型”。

这个例子:

代码语言:javascript
复制
struct _PTPObjectHandles *ptr1;
int something;
struct _PTPObjectHandles *ptr2;

如果您将其改写为:

代码语言:javascript
复制
PTPObjectHandles *ptr1;
int something;
PTPObjectHandles *ptr2;

这是主要原因。

但是,它还提供了一个库开发人员,它使您能够在将来将它重新定义为其他东西。我已经看到过一些情况(例如,OpenSSL),这些案例将ty清晰度从真正的结构更改为指向结构的指针(例如)。(当然,这不起作用,但您可以想象一下这样的情况,即类型胡枝子实际上是会改变的,而且它会工作。)

所以你必须这么做吗?不是的。

人们这么做是为了让代码更具可读性吗?是。

注意,C++类实际上是在做相同的事情。如果您从底层阅读一本好的C++,您会发现它首先从一个结构开始,然后将' struct‘单词更改为'class’,然后开始使用直名实例化它。

编辑:和。请务必阅读下面@Bathsheba的注释,并检查C中的适当命名约定。如他所指出的,它应该是带有小写p的_pTPObjectHandles。对于我自己的风格,我避免使用大写字体太简单,因为我喜欢我的大写类型在C++中是真类,并且想知道它们什么时候才是类型。但是,同样,这是一个风格的选择。

票数 2
EN

Stack Overflow用户

发布于 2014-04-01 13:55:37

在一定程度上,您可以转发内部结构的引用,但也可以在代码的其余部分使用有意义的名称,如下所示:

代码语言:javascript
复制
struct _mylist
{
    struct _mylist *next;
    /* etc ... */
};

typedef struct _mylist MyList;

请注意,切换order循环会使事情变得更加可读性,但是您仍然需要这两个声明,因此:

代码语言:javascript
复制
typedef struct _mylist MyList;

struct _mylist
{
    MyList *next;
    /* etc ... */
};

你不能做的是:

代码语言:javascript
复制
typedef struct { MyList *next; } MyList;

所以你必须有这两个声明。

我倾向于使用类似于第一种形式的东西,如下所示:

代码语言:javascript
复制
typedef struct _mylist
{
    struct _mylist *next;
    /* etc ... */
} MyList;

很明显,这两种类型的含义是相同的。

票数 1
EN

Stack Overflow用户

发布于 2014-04-01 13:43:22

在这一行代码之后,只需使用PTPObjectHandles即可创建struct。创建这个结构

无类型胡枝子struct _PTPObjectHandles aStruct;

与ty胡枝子f:PTPObjectHandles aStruct;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22787518

复制
相关文章

相似问题

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