之前一直搞不懂为什么gcc的时候别人都是后面跟着多个文件,明明直接编译主函数的那个源文件也可以运行呀。比如有两个文件,一个是主函数的,一个hello_f是调用函数的定义。
:
#include"hello_f.c"
int main(){
fun();
}
hello_f.c:
#include<>
void fun(){
printf("hi");
}
void fun2(){
printf("f2");
}
这样只要执行gcc 就完成了。
但有的时候,可能不希望把hello_f里的函数都开放使用,只允许使用一部分。那么这个时候就不能include整个.c文件了,需要使用头文件,把允许使用的函数放在头文件里。
hello_f.h
#ifndef JSONDATA_HELLO_F_H
#define JSONDATA_HELLO_F_H
void fun();
#endif //JSONDATA_HELLO_F_H
改为:
#include"hello_f.h"
int main(){
fun();
}
这样主函数里就不能调用fun2了,同时还实现了接口和定义的分离。
需要注意的是,这样gcc的时候就不能只编译一个了,需要被hello_f.c也编译
gcc hello_f.c
这多文件编译的一个最简单的方案,不过有的时候只是改了主函数的一个些语句,并没有改hellof_f.c里的内容,全部重新编译源文件比较耗时。
可以分别编译每个源文件,但是不做链接操作
gcc -c .
gcc -c hello_f.c
gcc hello_f.o
这样,如果每次只要只要编译改动的文件,再做链接即可。