smart_210_
zou_zhen
2015-04-26 14:59
采纳率: 78.9%
浏览 2.0k
已采纳

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

以下是头文件的代码,想问下用“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;
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • u010259906
    魔尊长安 2015-04-27 13:44
    已采纳

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

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

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

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

    点赞 评论
  • caozhy

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

    点赞 评论
  • u012271952
    浪前青山 2015-04-27 00:41

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

    点赞 评论
  • u013897132
    沈郎 2015-04-27 01:03

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

    点赞 评论

相关推荐