我正在用C编写一个程序,我需要用不同的模块构建它。
我定义了一个数据结构,以便在其中一个模块的头文件中创建一个链表。
当我在其他模块中包含此头文件时,我的程序无法编译。
我的结构定义是:
typedef struct node
{
char bla[10];
int num;
struct node* next;
}Name;
我想知道实现这个的正确方法是什么。 感谢
答案 0 :(得分:1)
在其他标题中,只需使用前向声明即可。您无需定义它,因为这将创建重复的定义。链接器将处理实际定义中的链接。
因此,如果您在标题A中定义了给定的结构,要在标题B中使用它,您只需将以下行放在标题的顶部
struct node;
typedef struct node Name;
然后,您可以在该标题中的函数声明中使用声明。
如果您尝试在头文件中实际放置函数定义,则需要使用预处理器宏来防止文件被递归包含。
在a.h
中,你会把
#ifndef __A
#define __A
#include "b.h"
...
#endif
然后在b.h
中你会把
#ifndef __B
#define __B
...
#endif
然后,即使您在a.h
中同时包含b.h
和main.c
,也不会有递归包含,并且编译将成功。
理想情况下,标题仅限于结构/类型定义和函数声明,因此只需要前向声明。