我有一个头文件(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
中的常规函数之前,我遇到了重复错误。但现在这些文件似乎比我计划的更依赖于彼此。我也不明白为什么会这样。
答案 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;
}