我有三个文件:
的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中的其他函数
答案 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]