c - 是否可以#Include 到 "diamond inheritance"结构中?

标签 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

最佳答案

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

标题:

// 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 守卫很有用,也是一个养成的好习惯,但它们可能不是解决这个特定问题的方法。

关于c - 是否可以#Include 到 "diamond inheritance"结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13937523/

相关文章:

php - 命名空间内所需的类无法实例化

ruby-on-rails - Rails 3 - 使用“包含”进行选择?

javascript - 何时使用 JS .includes() 与 .some()?

包含外部库时 C++ 多重定义错误

C:自顶向下归并排序 - 为什么无限递归?

c - 为什么这个快速排序算法的实现代码会出现 Segmentation fault 错误?

c - 在以下程序中,对change_it()的调用似乎无效。请解释并更正代码?

c - 同一变量的两个枚举定义

c++ - CMake + Qt 创作者 : Add header files to project files

c - C语言中枚举和结构体的区别?