gpt4 book ai didi

c - 什么时候应该 typedef struct 与 pointer to struct?

转载 作者:太空狗 更新时间:2023-10-29 17:02:38 25 4
gpt4 key购买 nike

我不是低级非面向对象编程语言的专家,而且我正在为工作项目编写一些 C 代码。我正在尝试创建一些合适的抽象数据类型来使用,谷歌搜索让我意识到人们以两种方式使用基于结构的 ADT。有些人将数据类型定义为结构:

typedef struct adt {
//content here
} adt;

并在头文件中将其公开。

其他人将数据类型定义为指向结构的指针:

// In .c file:
typedef struct adt_s {
//content here
} adt_s, *adt;


// In .h file:
typedef struct adt_s *adt;

我知道这种方法允许你在不让外界知道这个结构里面有什么的情况下对结构进行类型定义,所以程序员可以使用同一个头文件中提供的函数来操作这个数据类型。

还有其他原因可以挑剔吗?对于何时将 ADT 定义为结构以及何时将它们定义为指向结构的指针,是否存在一般的“经验法则”?

最佳答案

您也可以在没有 typedef 的情况下转发声明结构 - 唯一的区别是:

  • 使用或不使用关键字 struct 界面是否看起来更干净
  • 使用或不使用显式指针时界面是否看起来更干净 *

例如。

struct S1;
typedef struct S2 S2;
typedef struct S3_s *S3;

void foo1(struct S1 *arg);
void foo2(S2 *arg);
void foo3(S3);

显然,这仅适用于接口(interface) header 中的前向声明结构。

如果您一开始就没有隐藏结构实现,那么在 S1S2 之间进行选择是一个偏好(或一致性)问题。我不会使用 S3 除非它是一种真正不透明/隐藏的类型。

个人偏好是将 S1(显式结构关键字)用于大型/复杂聚合,将 S2 用于小型结构,您可能将其视为值而不总是通过指针。 YMMV。

关于c - 什么时候应该 typedef struct 与 pointer to struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9296492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com