C语言Linux下多文件编程
多文件编写步骤增量编译补充日志的内容
多文件编写步骤- 首先,先建一个文件夹存放所有的项目文件编写头文件
检查头文件语法
gcc -c xx.h (gcc -E xx.h看预处理结果)在编译没有问题的时候会生成一个xx.h.gch文件 这个是经过编译后的头文件xx.h.gch 如果存在,则下次编译无效。(建议删除) 编写.c文件
把头文件导入把在头文件中声明的全局变量定义把在头文件中声明的全局函数定义 检查实现文件的语法问题
gcc -c xx.c如果编译成功,生成xx.o目标文件编译实现文件中,有#include"xx.h"指令
==*==首先会查找是否有xx.h.gch文件,如果有,则你对(.h)文件修改无效,直接使用xx.h.gch文件,并不会导入xx.h 链接所有目标文件(.o)
gcc a.o b.o c.o -o a.out只是链接的过程 没有进行编译 比直接用gcc a.c b.c c.c 的效率高。
修改哪个文件,就编译哪个文件,其它没有修改的文件,则不需要编译保留所有的目标文件(.o) (以后有更好的方式替换 静态库和动态库)重新再进行链接即可为什么不需要编译那些调用了这些函数的实现文件
在编译阶段并不会生成具体的函数指令,只有一个函数的调用指令这个函数的调用指令只有当链接阶段才会去链接函数定义的位置 补充日志的内容
#include#define LOG1(fmt,...) printf("%s %s %d:"fmt,__FILE__,__func__,__LINE__,__VA_ARGS__) #define LOG2(fmt,args...) printf("File[%s:%s(%d)]:" fmt "n", __FILE__,__FUNCTION__, __LINE__, ##args) //args... == args,... int main(int argc,char **argv){ LOG2("日期:%s",__DATE__); LOG1("日期:%s",__DATE__); //预处理结果一样 return 0; }



