1

这是我的 C 课上的作业;我已经有使用 C++ 的经验。我遇到的问题是,我的实现简直就像地狱一样阴暗。我当前的实现只允许一次使用一个 LinkedList。我知道我总是可以只传递一个指向结构的指针,但我想避免这种情况。因此,它变得非常阴暗。我也没有办法规范函数的范围;它们在全球范围内可见。还要注意指向 h 文件中结构的指针;这就是为什么我不能拥有多个合一程序的原因。除了将指针传递给每个函数之外,任何人都可以想到另一种方式吗?

它目前只是单链接,但双链接一个不会超过 30 分钟。

链表.h

链表.c

4

2 回答 2

4

是的,在 C 语言中,您会将指向结构的指针传递给对其进行操作的每个函数。

typedef struct list list_t;

list_t *list_new();
void list_delete(list_t *list);
void list_insert_back(list_t *list, void *obj);
void list_insert_front(list_t *list, void *obj);
/* etc. */

我不确定您所说的“调节范围”是什么意思。如果您在谈论函数名称,那么您通常会在函数名称前面加上一个像list_上面一样的通用前缀。

在幕后,这最终与 C++ 代码相同。C++ 编译器为成员函数添加前缀(如示例使用list_,尽管 C++ 编译器的做法不同),并且 C++ 编译器也this隐式传递参数。

事实上,最古老的 C++ 编译器 (cfront) 会将 C++ 代码直接翻译成 C 代码,就像上面一样。

请注意,与典型的 C++ 方法相比,您不必在头文件中定义链表结构——这允许您在不破坏 ABI 兼容性的情况下更改数据结构。

于 2012-10-29T01:49:27.180 回答
3

由于您的问题的其余部分已得到解答,我想补充一点,您可以限制函数的范围:只需声明它们static,这将为它们提供内部链接:

/* This function won't be seen outside of the header file */
static void foo(list *l); 

这基本上相当于foo在一个类中声明一个私有函数:

class list
{
private:
    void foo();    
};
于 2012-10-29T02:46:10.173 回答