可以不包含具有struct定义的头文件吗?

时间:2018-03-19 03:09:52

标签: c

我有a.h

#include "b.h"  // XX

struct A {
 int asdf;
 struct B *b;
};
extern struct A aaa;

另外b.h

#include "a.h"

struct B {
 int asdf;
 int ghjk;
}
static inline void sth() { aaa.asdf*** }

它出现以下错误:

b.h:17:6: error: ‘aaa’ undeclared (first use in this function)

但是如果我删除行XX,编译就会成功。

这样做可以吗?

1 个答案:

答案 0 :(得分:0)

如果删除该行,编译可能会有效,但程序不会链接。

  • 您必须在某处定义 aaa
  • 您的标头文件必须由#ifndef HEADER_H ...标头警卫包围。
  • 有两个相互包含的头文件是程序设计不良的标志。
  • 代码中任何位置extern的存在都是程序设计错误的表现,只有极少数例外。
  • 在某些情况下,您可以在头文件中放置(静态内联)函数定义,但大多数时候这意味着错误的程序设计。

总结:非常糟糕的程序设计导致程序非常糟糕。