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

hud*_*dac 0 c include

我正在尝试用C做一些项目.

我想知道是否有可能#include从同一个文件制作两次,以回忆钻石遗产的方式.

  • ac#include "a.h"
  • 公元前#include "b.h"
  • bh#include "a.h"

是否有可能#include "b.h"交流

我收到一个错误:

some_variable already defined in a.obj
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 6

简单:不要在头文件中定义变量,只需声明它们:

标题:

// a.h

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

extern int my_variable; // declare my_variable

...

#endif
Run Code Online (Sandbox Code Playgroud)

源文件ac:

// a.c

#include "a.h"

int my_variable;        // define my_variable

...
Run Code Online (Sandbox Code Playgroud)

源文件bc:

// a.c

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

...
Run Code Online (Sandbox Code Playgroud)

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