将主文件拆分为C中的模块

时间:2015-12-15 23:17:55

标签: c

我有三个文件:

的module.c:

void bar() {
  foo();
}

module.h :(为了简单起见,我没有把包含警卫放在一起)

void bar();

的main.c

void foo() {
  //some code
}
int main() {
  bar();
}

编译main.c和module.c时,module.c返回错误,说明未定义foo()。我该如何解决这个问题? 基本上,我想采用我的实际主文件,这个文件相当大,并将其中的部分文件拆分为其他文件以便于阅读,但这些函数调用main中的其他函数

3 个答案:

答案 0 :(得分:2)

由于您的依赖关系的指示,这很棘手。

我可以将你的代码分成三个编译单元:main.c,module.c和foo.c

如果你这样做,你就不会在main,main only调用栏中有任何foo代码,而bar包含foo,这是在foo中定义的。

的main.c

#include "module.h"

int main() {
    bar();
}

的module.c

#include "foo.h"

void bar() {
    foo();
}

foo.c的

void foo() {

}

最重要的是,你不需要在foo.h之外声明foo,或者在module.h之外声明。

答案 1 :(得分:1)

我猜module.h也可以定义void foo();,因此module.c也会实现foo。另一方面,如果bar间接依赖于foo,那么module.c可能包含由another_module.h实施的another_module.c

答案 2 :(得分:-1)

所有函数的原型定义放入module.h:

int main(int argc,char **argv);
void foo(void);
void bar(void);
int fludger(int abc,char *str);

除了将任何函数放在任何.c文件中之外,您还可以获得附带的好处,您不再需要根据调用的内容来命令给定.c文件中的函数[例如如果foo调用bar,则必须在上面定义 foo]