如何将C文件分成多个文件

时间:2014-09-29 12:37:55

标签: c file header makefile modular

我正在为一个班级做一个项目,需要帮助将我的程序分成不同的部分。我的老师给了我们一个提示,说明哪些文件会做什么,但他没有告诉我们如何编写头文件。根据我在网上学到的,我将每个.c文件中的函数原型放在它自己的.h文件中,并在.c文件中包含它们的“header.h”。但是,我收到编译错误,如

course1.c:20:3: warning: implicit declaration of function ‘initialize’ [-Wimplicit-function-declaration]
   initialize(courses, subjects, CRN);
   ^
vector1.c:14:6: error: conflicting types for ‘resize’
 void resize(char ***courses, char***subjects, int **CRN) {
      ^
In file included from vector1.c:2:0:
vector.h:11:6: note: previous declaration of ‘resize’ was here
 void resize(char ***subjects, char ***courses, int **CRNs, int *size);
      ^
vector1.c:39:6: error: conflicting types for ‘deallocate’
 void deallocate(char **courses, char**subjects, int *CRN) {
      ^
In file included from vector1.c:2:0:
vector.h:12:6: note: previous declaration of ‘deallocate’ was here
 void deallocate(char **subjects, char **courses, int *CRNs, int size);

我很确定我的文件具有正确的语法,因为我将它们分别编译成.o文件并且它们工作正常。有人可以请一般说明,如何将程序分成单独的文件?我想我显然做错了。编译器给我的一个错误是当一个函数在我包含的头文件中明确定义时,没有定义它。

1 个答案:

答案 0 :(得分:1)

    course1.c:20:3: warning: implicit declaration of function ‘initialize’ [-Wimplicit-       function-declaration]
   initialize(courses, subjects, CRN);

这意味着您需要将其声明为

 int initialize(courses, subjects, CRN);

  void initialize(courses, subjects, CRN);

如果您未指定旧C样式,编译器会将其视为返回int

vector1.c:14:6: error: conflicting types for ‘resize’
 void resize(char ***courses, char***subjects, int **CRN) {
  ^
In file included from vector1.c:2:0:
vector.h:11:6: note: previous declaration of ‘resize’ was here
void resize(char ***subjects, char ***courses, int **CRNs, int *size);
  ^

这意味着您在不同位置定义了两次函数resize,并且原型不同(它们具有不同数量的参数)。函数deallocate也是如此。