想请教下有关头文件的问题

以下是头文件的代码,想问下用“typedef void SeqList”这样写是啥意思呢?把“SeqLis”重命名为空类型?网上看了下是说什么封装,就是在 .c 文件下不能随意给SeqList定义的结构体里面 的对象进行赋值。求大神赐教!

 #ifndef _SEQLIST_H_
#define _SEQLIST_H_

typedef void SeqList;
typedef void SeqListNode;

SeqList* SeqList_Create(int capacity);

void SeqList_Destroy(SeqList* list);

void SeqList_Clear(SeqList* list);

int SeqList_Length(SeqList* list);

int SeqList_Capacity(SeqList* list);

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);

SeqListNode* SeqList_Get(SeqList* list, int pos);

SeqListNode* SeqList_Delete(SeqList* list, int pos);

#endif

以下是.c文件的一部分代码。如果加上一句list ->length=0,程序则会报错,报错原因就是说在头文件里面用void对SeqListNode进行了封装。这是什么意思呢?

int main(int argc, char *argv[]) 
{
    SeqList* list = SeqList_Create(5);

    int i = 0;
    int j = 1;
    int k = 2;
    int x = 3;
    int y = 4;
    int z = 5;
    int index = 0;

typedef void SeqList; 给void起别名为 SeqList
typedef void SeqListNode;
这样做是为了使用者方便阅读,

SeqList* SeqList_Create(int capacity); //这样一看返回值就知道是返回值是链表

void * SeqList_Create(int capacity); //如果这样,使用者一看只知道是返回指针,不知道具体的,可读性很差

所以才会给void起别名,封装好的底层函数,提供给使用者使用,使用者会给容易懂

结合下面
SeqListNode*
来看,应该是都替换成void *,C不支持泛型,这么做估计是希望写成类型无关的意思。

C语言里面的typedef,字面上理解就是类型定义,也就是给内置的或自定义的数据类型重新命名。typedef void SeqList;typedef void SeqListNode;
就是给void类型重新命名,下面代码SeqListNode* 等价于void *。

相当于给void起别名,感觉没什么意义。。