H文件只在编译过程的预处理阶段用到;在预处理阶段,所有的H文件中的内容被原封不动地拷贝到C文件中出现#include的地方,并暂存在一个临时文件中,所有C文件中的语句行号也被记录在了临时文件中(C文件中的第n行因为H文件的缘故,在临时文件中被移动了),编译阶段处理的是临时文件中的内容,C语句的行号也在编译结束后记录在了可调试的目标代码中,用以标示目标代码与原C文件中语句关系。
从以上过程可看出,H文件中的所有语句在C文件中只有一个相同的行号,即通过目标代码的索引找到C文件时,C文件中没有相应的语句,因此造成源程序级别的调试不能进行。
有些编译调试环境,解决了这种问题,但多数IDE没有处理这类情况,因为很少有人把代码写到H文件中。
|