是在.c文件头文件路径参考包含在目标文件(.o)

问题描述:

我编译具有线的example.c文件:是在.c文件头文件路径参考包含在目标文件(.o)

#include "parse/properties/properties.h" 

编译器创建得到一个example.o文件。 example.o文件中包含头文件的路径吗?或者是外部信息?

+2

我要说它完全取决于实施。 – unwind 2012-04-13 12:58:31

它可能会或可能不会,目标文件格式不规范(标准甚至没有提到“目标文件”)。编译器可能为了调试目的而插入#include,或者它可能完全跳过它。

还要注意#include'ing是由编译器中做了什么标准desrcibes在翻译的第一阶段,使用文本预处理器; #include-directive指示预处理器逐字复制并放置另一个文件的内容。出现这种情况的实际对象文件会产生很久以前

+0

如何链接器知道哪个标题对应于一定的.o文件? – Olof 2012-04-13 13:21:15

+0

@Olof它不应该是必要的。这不是链接器的要点。而且,每种二进制格式都会有所不同。 – 2012-04-13 13:26:49

+0

还要注意,它可以只包含文件名,而不是路径。由于在基于项目的系统中,调试器可能拥有自己对包含路径的访问权限,因此路径不是必需的,并且可能会造成混淆。 – 2012-04-13 13:41:41

它被定义实现,但一般当你与调试选项编译(例如,在GCC -g)的文件路径包括,以帮助您调试

+0

@San因为答案是对方的一分钟内发布,他们可能没有看到对方。 – 2012-04-13 13:55:13