【发布时间】:2013-06-13 01:16:56
【问题描述】:
我遇到的问题是 C 头文件中的循环依赖问题...环顾四周,我怀疑该解决方案与前向定义有关,但尽管列出了许多类似的问题,但似乎没有一个提供信息我需要解决这个问题...
我有以下 5 个源文件:
// fwd1.h
#ifndef __FWD1_H
#define __FWD1_H
#include "fwd2.h"
typedef
struct Fwd1 {
Fwd2 *f;
}
Fwd1;
void fwd1 (Fwd1 *f1, Fwd2 *f2) ;
#endif // __FWD1_H
.
// fwd1.c
#include "fwd1.h"
#include "fwd2.h"
void fwd1 (Fwd1 *f1, Fwd2 *f2) { return; }
.
// fwd2.h
#ifndef __FWD2_H
#define __FWD2_H
#include "fwd1.h"
typedef
struct Fwd2 {
Fwd1 *f;
}
Fwd2;
void fwd2 (Fwd1 *f1, Fwd2 *f2) ;
#endif // __FWD2_H
.
// fwd2.c
#include "fwd1.h"
#include "fwd2.h"
void fwd2 (Fwd1 *f1, Fwd2 *f2) { return; }
.
// fwdMain.c
#include "fwd1.h"
#include "fwd2.h"
int main (int argc, char** argv, char** env)
{
Fwd1 *f1 = (Fwd1*)0;
Fwd2 *f2 = (Fwd2*)0;
fwd1(f1, f2);
fwd2(f1, f2);
return 0;
}
我正在用命令编译:gcc fwdMain.c fwd1.c fwd2.c -o fwd -Wall
我尝试了几种方法来解决编译错误,但只能设法将错误替换为其他错误...如何以最少的代码更改来解决循环依赖问题? ...理想情况下,就编码风格而言,我想避免在我的代码中使用“结构”一词。
【问题讨论】:
-
循环依赖通常是个坏主意。你能把 Fwd1 和 Fwd2 合并成一个结构吗?比如'struct Fw {Fw *f1; Fw **f2;}' ?另一件事你没有在你的'main()'中初始化'f1'和'f2'。
-
@BlueChip 如果答案解决了您的不便,请将其标记为正确,以便其他有类似不便的人知道这是一个解决方案。
-
@Thanushan Balakrishnan :您可以想象,实际 问题比这个简化的示例要复杂得多。遗憾的是,将这些元素组合起来不是一个(合理的)选项...@cgledezma - 我似乎错误地设置了我的电子邮件选项,因为我没有被告知已发布解决方案
标签: c struct typedef forward-declaration circular-dependency