有没有人知道如何处理符号常量和类型 以系统方式定义大型程序以避免循环依赖 头文件之间?我有一个想法来定义一个头文件 包含所有结构,联合和枚举类型定义以及另一个头文件 它将包含所有符号常量定义。但到目前为止我有疑虑 作为关于实现隐藏的这个解决方案。谢谢你的任何想法。
答案 0 :(得分:1)
您可以将typedef
语句与实际struct
定义分开,并在包含其他标题之前放置它们。这样,如果您的数据类型foo
包含类型为bar *
的成员,则它不需要立即定义bar
- 它会很高兴知道它和&{ #39;一种有效的数据类型,稍后将得到解决。
#ifndef FOO_H
#define FOO_H
typedef struct foo_s foo;
#include "bar.h"
struct foo_s
{
bar *my_bar;
};
#endif
#ifndef BAR_H
#define BAR_H
typedef struct bar_s bar;
#include "foo.h"
struct bar_s
{
foo *my_foo;
};
#endif
答案 1 :(得分:0)
解决方案是简单地使用某种程序设计方式。程序中的每个“对象”/“模块”应包含一个h文件和一个c文件。 h文件是公共接口。每个这样的对象应该只关注它自己的指定任务。它应该只包括执行该任务所需的资源。
有了这样的设计,就不应该存在任何循环依赖,或者设计存在缺陷。你不应该用各种代码技巧来修复糟糕的设计,你应该重新进行设计。
但是当然可以从代码的不同部分多次包含相同的资源。这就是为什么我们总是在每个单独的h文件中使用标题保护。
答案 2 :(得分:-1)
在任何给定的头文件中,输入
#ifndef FILENAME_H
#define FILENAME_H
struct a {}
union b {}
function c();
#endif
这将导致文件只被包含一次。