C:包含一个文件,其中包含一个也需要包含在主程序中的文件

时间:2016-01-17 13:31:54

标签: c header include

我有一个头文件(generalfunctions.h):

#ifndef GENERALFUNCTIONS_H
#define GENERALFUNCTIONS_H

//functionsdeclartion for example
int getInt(char* text);

#endif /* GENERALFUNCTIONS_H */

和一个C文件generalfunctions.c我在其中包含了这个头文件(因此我可以使用彼此之间的一些功能,并且不用担心他们的命令)并编写函数。

generalfunctions.c

#include "generalfunctions.h"
#include <stdlib.h>
#include <stdio.h>

 //functions implentaion for example
 int getInt(char* text){
    int  i;
    printf("%s\n", text);
    if(scanf("%d", &i)==EOF){
        printf("INT_ERROR\n");
        exit(1);
    }
    while (fgetc(stdin) != '\n');
    return i;
}
//...

现在我需要一些名为project_objects.c的文件中的一些函数,它们与project_objects.h一起定义了几个结构,联合,变量和函数,以及我项目所需的这些东西。

project_objects.h

#ifndef POINT_H
#define POINT_H

typedef struct  point{
    int x;
    int y;
} point;

point create_point(void);
void print_point(point *p);
//...

#endif /* POINT_H */

project_objects.c

#include <stdlib.h>
#include <stdio.h>
#include "project_objects.h"
#include "generalfunctions.h"

point create_point(void){
  point p;
  p.x=getInt("Give my a x");
  p.y=getInt("Give my a y");
   return p;
}
void print_point(point *p){
      printf("x: %d\n", p->x);
      printf("y: %d\n", p->y);
}
//..

但是我还需要直接在我的主程序中使用generalfunctions.h中描述的一些功能:

#include "generalfunctions.c"
#include "project_objects.c"
#include <stdlib.h>
#include <stdio.h>

int main(void){
  int i=getInt("How many points would you like to create?");
  while(i<1){
      i=getInt("Cannot create a negative number of points. How many points would you like to create?");
  }
  point pointarray[i];
  for(int j=0; j<i; j++){
      pointarray[j]=create_point();
  }
  for(int k=0; k<i; k++){
       printf("Point %d:\n", k+1);
       print_point(pointarray+k);
  }
  return EXIT_SUCCESS;
}

这似乎有效。如果我只包含h文件,那么我得到的错误是{链接}时未定义getInt()。在我将{C}文件包含在project_object.c中的常规函数​​之前,我遇到了重复错误。但现在这些文件似乎比我计划的更依赖于彼此。我也不明白为什么会这样。

1 个答案:

答案 0 :(得分:2)

不要包含 .c -files。在 .h -files中编写函数protytypes并包含它们。

project_object.h

typedef int faa;

foo.h中

include "project_object.h"

faa foo( faa x ); // prototype for function "foo"

foo.c的

#include "foo.h"

faa foo( faa x ) // implementation of function "foo"
{
    return x + 666;
} 

的main.c

#include "project_object.h"
#include "foo.h" // include .h-file with prototype of function "foo"

int main( void )
{
   faa x;
   x = foo(0);   // call function "foo"

   return 0;
}