我有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
,编译就会成功。
这样做可以吗?
答案 0 :(得分:0)
如果删除该行,编译可能会有效,但程序不会链接。
aaa
。#ifndef HEADER_H
...标头警卫包围。extern
的存在都是程序设计错误的表现,只有极少数例外。总结:非常糟糕的程序设计导致程序非常糟糕。