华为机考题
答: 头文件不会被编译,编译器只编译源文件。这是因为编译的第一个阶段:预处理的职责就是1. 展开#define宏定义,以及2. 处理#include,将被包含的文件直接插入到预编译指令的位置,此外,3. 预处理还包括删除注释等。
因此头文件会在预编译阶段就被编译器在源文件中展开了,所以自然不会被编译。
答:因为一旦修改头文件,所有包含该头文件的文件都要重新编译。所以a.c 中包含的a.h里,包含了b.h,那么不论往下包含了多少级,牵一发而动全身,都需要重新编译。
答:有两个方案,一个是增量编译;另一种是针对类使用的,将引用改为指针,添加前向声明的方法。
方法二即通过减少在头文件中包含其他头文件的方法来降低重新编译消耗。头文件中将添加前向声明,引用改为指针,函数在源文件的实现时再添加类的头文件。具体看该链接
答:有类的前向声明和函数的前向声明,主要是为了告知编译器实际定义标识符之前告诉编译器标识符的存在。
可参考该链接
答:自我回答,简单概括就是只对修改过的文件进行编译,对未修改的文件不再重新编译,根据文件修改时间判断是否更新。细节可查看该链接