是否可以#Include一个“钻石继承”结构?

时间:2012-12-18 16:40:00

标签: c include

我正在尝试在C中制作一些项目。

我想知道是否可以两次从同一档案中制作#include,以回忆钻石遗产。

  • a.c 中有#include "a.h"
  • b.c 中有#include "b.h"
  • b.h 中有#include "a.h"

是否可以在 a.c 中使用#include "b.h"

我收到错误:

some_variable already defined in a.obj

2 个答案:

答案 0 :(得分:6)

简单:不要在标题中定义变量,只需声明它们:

部首:

// a.h

#ifndef A_H             // always use #include guards
#define A_H

extern int my_variable; // declare my_variable

...

#endif

源文件a.c:

// a.c

#include "a.h"

int my_variable;        // define my_variable

...

源文件b.c:

// a.c

#include "a.h"
#include "b.h"

...

正如其他人所提到的,#include guards很有用,也是一个很好的习惯,但它们可能不是解决这个特定问题的方法。

答案 1 :(得分:2)

您必须在 a.h 中声明extern变量,然后按以下方式修改标题 a.h

 #ifndef a_h
 #define a_h

   //your a.h 

 #endif