打印
[嵌入式linux]

请教:编译器与.c文件和.h文件的问题

[复制链接]
2014|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
quben|  楼主 | 2007-12-4 09:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
computer00| | 2007-12-4 09:50 | 只看该作者

include就是代码复制。将对应的那个文件里面的代码复制进来

使用特权

评论回复
板凳
quben|  楼主 | 2007-12-4 10:18 | 只看该作者

.h中对应的函数体是怎么处理的呢

使用特权

评论回复
地板
computer00| | 2007-12-4 10:48 | 只看该作者

跟扩展名无关,都是按照代码一样的处理方法。

使用特权

评论回复
5
quben|  楼主 | 2007-12-4 10:56 | 只看该作者

我理解你的“include就是代码复制”意思

包含.H文件只复制了一些函数声明,但怎么去找函数体呢

打个比喻,main.c中包含了a.h,a.h文件中有 max(x,y)的函数声明,但a.h文件中没有max(x,y)的声明,b.c文件中有max(x,y)的声明,在编译时如何处理

使用特权

评论回复
6
computer00| | 2007-12-4 15:28 | 只看该作者

那应该是连接的事了,编译之后各个部分连接起来就行了。

使用特权

评论回复
7
quben|  楼主 | 2007-12-4 15:54 | 只看该作者

假如main.c也包含了b.h呢

main.c代码复制后,然后编译后,连接时好像就分不清函数体到a.o还是b.o中去找了

使用特权

评论回复
8
computer00| | 2007-12-4 16:52 | 只看该作者

本来就是分不清楚的。需要在全部目标文件下找。

使用特权

评论回复
9
infree| | 2007-12-6 15:10 | 只看该作者

同意楼上

对于库文件中的函数也是一样处理的,用户源程序中包含了库中函数的声明,但是这个函数具体在哪里是不用指出来的,在链接时会在所有的.o和库文件中查找。

使用特权

评论回复
10
quben|  楼主 | 2007-12-7 09:16 | 只看该作者

今天在工程里用实际的.h文件,.c文件和实际的函数试了一下

我把原来放在Lcd7920.h中的液晶初始化LCD_Ini()的函数体放到了串口的Uart.c中,然后编译连接

发现编译完成后,连接时确实是在所有的.o寻找函数体的

然后,我再在Main.c中再放了一个LCD_Ini()的函数体,编译时提示重复定义

呵呵,我原来以为.h和.c中的函数声明要绝对对应的,一直认为在预编译时会处理这对应关系

使用特权

评论回复
11
hurt90| | 2007-12-20 21:02 | 只看该作者

在Linux的Makefile资料有讲的

调用函数时,该被调用的函数可以声明在本文件或被inluce的头文件,可以不实现.当编译连接时,就在各个目标文件里搜索.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

270

帖子

1

粉丝