共享具有不同标头的数据结构

时间:2014-12-31 16:34:58

标签: c struct header linked-list header-files

我正在用C编写一个程序,我需要用不同的模块构建它。

我定义了一个数据结构,以便在其中一个模块的头文件中创建一个链表。

当我在其他模块中包含此头文件时,我的程序无法编译。

我的结构定义是:

typedef struct node
{
    char bla[10];
    int num;
    struct node* next;
}Name;

我想知道实现这个的正确方法是什么。 感谢

1 个答案:

答案 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.hmain.c,也不会有递归包含,并且编译将成功。

理想情况下,标题仅限于结构/类型定义和函数声明,因此只需要前向声明。