头文件
头文件中应该写什么
?问题:头文件可能被任何的源文件包含,意味着头文件的内容会在多个目标文件中存在,合并时要保证不能冲突
?重点:头文件中只能编写声明语句,不能有定义语句
??全局变量声明 extern int num;
??函数声明
??宏常量
??宏函数
??typedef 类型重定义
??结构、联合、枚举的类型声明
头文件的编写规则
?1、为每个.c文件写一份.h文件,.h文件是对.c文件的说明
?2、如果需要使用某个.c文件中的变量、函数、宏、结构体…,只需要把该.c文件的.h文件导入即可使用
??3、.c文件也需要导入它的.h文件,目的是为了让声明与定义一致
头文件的相互包含
??假如a.h包含了b.h,b.h又包含a.h,这种情况就叫做头文件的相互包含,会导致编译错误
?当确认变量、函数名已经定义且导入,但是依然报错:未定义 xxxx,先考虑是否头文件卫士写错,在考虑是否是头文件相互包含
?解决方法:从a.h中把需要用到的b.h内容提取出来,从b.h中需要用到的b.h内容提取出来,放入新编写的c.h
Makefile
?Makefile是由一系列编译指令组成的可执行文本文件,也叫做编译脚本
??在终端执行make命令就会自动执行Makefile文件中的编译指令,它可以文件的修改时间来判断哪些文件需要编译,哪些文件不需要重新编译,根据依赖情况判断哪些文件先编译、哪些后编译,从而提高编译效率
编译规则
?1、如果这个项目没有编译过,则所有的 c 文件都要编译并被链接成可执行程序。
??2、如果某几个 .c 文件被修改,则此次只编译修改过的 .c 文件,并链接生成可执行程序。
?3、如果某个.h文件被被修改,依赖该头文件的所有.c文件全部重新编译并链接。
一个最简单的Makefile脚本
执行目标:依赖
编译指令
被依赖的目标1:依赖的文件
编译指令
被依赖的目标2:依赖的文件
编译指令
被依赖的目标3:依赖的文件
编译指令
...
clean:
rm ...
|