比如你要写一个头文件叫utils.h,里面声明了一个一个函数int add(int a, int b),那头文件里的内容是这样的:
#ifndef UTILS_H
#define UTILS_H
int add(int a, int b);
#endif
-------分割线------
然后再创一个文件utils.c,里面定义函数add
#include "utils.h"
int add(int a, int b)
{
return a + b;
}
-------分割线------
然后假如你想在main.c里使用这个头文件,就把utils.h utils.c放到main.c所在的文件夹里,然后在main.c里这么写
#include <stdio.h>
#include "utils.h"
void main(void) {
printf("%d", add(2,3)); //5
}
------分割线------
上面有些不是硬性规定,但是希望你能遵守,养成好习惯,在头文件里面只声明,定义只写在.c里面
还有,因为你现在有两个.c文件了,所以编译的时候不要忘了编译utils.c。(.h是不用编译的)
追问我之前就这样写,不行啊
追答怎么个不行了
追问![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/e824b899a9014c084d40f307077b02087bf4f41d?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/5882b2b7d0a20cf4472b257d7b094b36adaf99dd?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/d788d43f8794a4c2ab683c8903f41bd5ac6e39cd?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/0ff41bd5ad6eddc48d6d6f5934dbb6fd5366338e?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
就这样,第一个是报错
追答你是不是没有把那个.c加入到项目里面
你试试用命令行编译,比如
gcc -o tanchishe.exe tanchishe.c utils.c
追问我用的编译器是c-free,这个不用建项目
追答c-free是编辑器吧,我猜你的编译器还是gcc。总之你看看有没有什么编译选项,项目属性之类的,改改。c-free我没用过所以你自己找找。
总之问题在于你没有告诉他其实你有两个源文件要编译
或者你新建一个项目然后把这三个文件都加进去试试
追问我回头用VS试试吧