我需要有关 C 中通用链表模块实现的布局和组织的反馈

问题描述 投票:0回答:1

以下是我的 C 通用链接列表模块的原型,供我将来计划编写的任何程序使用。

#ifndef LINKED_LIST_H
#define LINKED_LIST_H

#include <stdio.h>

typedef struct NodeType {
    void*     value;
    NodeType* next;
} Node;

typedef struct LinkedListType {
    Node*  head;
    int   (*compare)(void*, void*);
    void  (*free)   (void*);    
} LinkedList;

LinkedList* linkedList_init(LinkedList* list, 
                            int  (*compare)  (void*, void*),
                            void (*freeData) (void*));          // Initializes the generic functions and head of the list

int linkedList_isInitialized(LinkedList* list);                 // Return 0 if is empty, otherwise return 1

int linkedList_add(LinkedList* list, void* data);               // Add a node to the end

int linkedList_remove(LinkedList* list, int index);             // Remove a node at index

int linkedList_insert(LinkedList* list, int index, void* data); // Insert a node at index

Node* linkedList_get(LinkedList* list, int index);              // Return node if node is at index, otherwise return NULL

void linkedList_free(LinkedList* list);                         // Free all the elements in the list

#endif

我的实现只是定义了所有这些方法的行为。如果我将其编译成 DLL 并将其保存在我的个人 util 文件夹中,这是否是组织代码以使其可重用的有用方法?如果不是,我应该改变什么?

c data-structures code-organization aesthetics project-layout
1个回答
0
投票

从头开始,即使结构的第一个声明也是无效的

typedef struct NodeType {
    void*     value;
    NodeType* next;
} Node;

在结构声明中,名称

NodeType
未定义。相反,你应该写

typedef struct NodeType {
    void*     value;
    struct NodeType* next;
} Node;

使用与标准 C 函数名称

free
一致的函数指针
free
的名称也是一个坏主意。

© www.soinside.com 2019 - 2024. All rights reserved.