在哪里以及如何放置typedef结构?

时间:2011-12-20 21:53:06

标签: c header struct typedef

我们有一个链表和一些typedefed结构:

struct _list_node {
    data_object *data;
    struct _temp_list_node *prev;
     struct _temp_list_node *next;
};
typedef struct _list_node list_node;

我们应该将typedef放在头文件中吗(包括struct _listnode? 然后将它包含在其他文件和LinkedList.c中?

3 个答案:

答案 0 :(得分:2)

如果它是模块接口的一部分,请将其放在头文件中。如果在LinkedList.c中调用函数的其他模块需要这些定义,则将它们放在标题中。

如果它们仅在LinkedList.c中使用,请将它们保密。

答案 1 :(得分:2)

是的,这就是你应该做的:把typedef和struct一起放在标题中。然后将标题(通过#include)包含到使用该结构的所有文件中。标题旨在包含声明,包括结构的声明。 typedef声明与那些自然适合的结构配对,并且通常期望有人在看代码。如果您将独占使用typedef,您可能会考虑以下语法,这使您无法完全使用struct关键字:

typedef struct {
    data_object *data;
    struct _temp_list_node *prev;
    struct _temp_list_node *next;
} list_node;

我并不特别注意上面这样做,但是很多人都这样做了,它进一步抽象出了list_node里面的内容,你可能想做些什么来进行适当的封装。

作为单独的说明,由于您将此标题包含在多个文件中,因此请不要忘记使用include guards

答案 2 :(得分:1)

如果您需要在链接列表之外访问它,通常会将其放入标题中。

我倾向于只让函数修改结构。所以linkedlist.c应该具有处理'list_node'的所有函数,所有这些函数都应该在.h

中声明。