我们有一个链表和一些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中?
答案 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
中声明。