防止值在 c 上发生变化

Prevent value from changing on c

我决定做一个静态库,用函数实现双向链表。现在它的头文件是这样的:

#ifndef LISTS
#define LISTS

#define LIST {0, NULL, NULL}

typedef struct node node;

typedef struct list {
  unsigned int length;
  node *beginning;
  node *end;
} list;

void listAppend(list *list, int value);
int listPop(list *list);
char listRemove(list *list, int value);
void listPrint(list *list);

void listClear(list *list);

#endif

即用户应使用 list myList = LIST;.

初始化列表

我可以防止 list.length 像 list.length++ 那样被用户随意更改他的代码吗?

通常,如果您想在纯 C 中对客户端隐藏实现,您可能会使用指向不完整类型的指针。为此,您在 .h 文件中提出结构声明,并在 *.c 文件中提出完整声明。您甚至不能将文字零添加到指向不完整类型的指针,更不用说取消引用它 and/or 更改一些数据。

此外,如果您想克服一切困难将列表的 header 放入堆栈,您可能想围绕 alloca() 编写一个宏,但我不确定如何计算*.h 文件中结构的大小,而没有在范围内声明。可以通过 extern const,但恕我直言,它太复杂了。