列出结构,显示ADT的详细信息

时间:2017-01-24 12:51:25

标签: c list struct interface

我正在通过C Interfaces and Implementation通过一本名为David R. Hanson的书来学习。关于他给出的List ADT有一些我无法理解的想法。

我们按如下方式定义List类型:

#ifndef LIST_INCLUDED
#define LIST_INCLUDED

#define T List_T

typedef struct T *T;
struct T {
    T rest; 
    void *first;
};

在这里,我可以看到List是以我熟悉的头尾方式构建的。我看到List_T是一个指向结构的指针,该结构被定义为保存相关的节点数据而T是别名。我没有得到的部分是,C编译器不会因为结构名称和指向它的指针名称使用相同类型名称T而感到困惑吗?我将在实现中使用的内容如下:

typedef struct List* list_t;
struct List {
    list_t rest;
    void *first;
};

因此struct和typedefed指针类型的名称与该结构的名称不同。两者都正常工作吗?

此外,David R. Hanson还说明了此列表定义:

  

List_T是指向结构List_T的指针。大多数ADT隐藏其类型的表示细节。列表显示这些细节,因为为此   特别是ADT,替代品引起的并发症超过了   这样做的好处......揭示List_T的表示以多种方式简化了界面及其使用。例如,可以静态定义和初始化struct List_T类型的变量,这对于在编译时构建列表非常有用,并且可以避免分配。同样,其他结构可以嵌入struct List_Ts。

这个ADT如何揭示它的内部结构?我的意思是,这不是所有的AD中的ADT吗?据我所知,C没有内置的数据隐藏机制。这与我们静态初始化这个结构并嵌入其他结构的能力有何关系?

注意:我查看了很多元帖子,看看如果我要从一本书中发布一部分源代码,应该遵循什么准则。我找不到任何澄清。但我认为应该没问题,因为代码是在MIT许可下分发的。如果这有问题,请通知我。

0 个答案:

没有答案