请教:编译器与.c文件和.h文件的问题
编译器是如何处理只include 其他.C文件,或 include 其他.H文件及调用该.H相对应的.C文件的编译过程<br /><br />谢谢!<br />include就是代码复制。将对应的那个文件里面的代码复制进来
.h中对应的函数体是怎么处理的呢
跟扩展名无关,都是按照代码一样的处理方法。
我理解你的“include就是代码复制”意思
包含.H文件只复制了一些函数声明,但怎么去找函数体呢<br /><br />打个比喻,main.c中包含了a.h,a.h文件中有 max(x,y)的函数声明,但a.h文件中没有max(x,y)的声明,b.c文件中有max(x,y)的声明,在编译时如何处理那应该是连接的事了,编译之后各个部分连接起来就行了。
假如main.c也包含了b.h呢
main.c代码复制后,然后编译后,连接时好像就分不清函数体到a.o还是b.o中去找了<br />本来就是分不清楚的。需要在全部目标文件下找。
同意楼上
对于库文件中的函数也是一样处理的,用户源程序中包含了库中函数的声明,但是这个函数具体在哪里是不用指出来的,在链接时会在所有的.o和库文件中查找。今天在工程里用实际的.h文件,.c文件和实际的函数试了一下
我把原来放在Lcd7920.h中的液晶初始化LCD_Ini()的函数体放到了串口的Uart.c中,然后编译连接<br /><br />发现编译完成后,连接时确实是在所有的.o寻找函数体的<br /><br />然后,我再在Main.c中再放了一个LCD_Ini()的函数体,编译时提示重复定义<br /><br />呵呵,我原来以为.h和.c中的函数声明要绝对对应的,一直认为在预编译时会处理这对应关系在Linux的Makefile资料有讲的
调用函数时,该被调用的函数可以声明在本文件或被inluce的头文件,可以不实现.当编译连接时,就在各个目标文件里搜索.
页:
[1]