完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我从***微芯片公司下载了一个示例项目,该项目由三个文件、一个头和两个soruce组成。头文件只显示函数原型(图1),PIC18F_LCD.c显示头文件的一些定义和所有函数的定义。我想问,为什么PIC18F_LCD.c需要包括头文件?我的想法是:main.c有PIC18F_LCD.h的函数调用,所以main.c需要包括头文件,然后当main.c被编译为对象文件时,Linker可以找到原型,然后连接PIC18F_LCD.c的对象文件中的定义。虽然PIC18FYLCD.C也有函数调用,但是它本身有定义,所以林克尔可以找到定义,为什么需要包括?
|
|
相关推荐
12个回答
|
|
这就是你要做的事情。我一直告诉你读这个文件,这一切都解释。组织代码文件在C和C++中。
|
|
|
|
QHB:我读过两遍,没提过。
|
|
|
|
我的意思是,它只是告诉你怎么做,而不是为什么要做。
|
|
|
|
编译器会看到一个函数。如果函数没有原型。然后编译器可以猜出这些参数的类型。或者使用C默认值,如果它猜错了。然后链接器将无法将代码链接在一起,类型将不匹配。变量也一样。MyValuy是int吗?浮标?编译器是如何知道的。FIX 1在每个C文件的BeFiGe中声明所有原型。现在,如果你做出改变,你需要在很多地方修复它。固定文件头文件。一切都是你。红色在一个地方。
|
|
|
|
NKurzman:但是,我已经在已经变成对象文件的.c文件中声明了原型。如果在这个.c文件中没有添加原型,为什么在链接阶段,链接器找不到函数的原型并将它链接在一起?
|
|
|
|
你的基本问题是,“为什么一个C文件包含它自己的头文件?”一个很大的原因是,它保证了头文件中的声明与C文件中的声明相匹配。如果只改变一个而不改变另一个,就会出现编译错误。
|
|
|
|
QHB:如果源文件中有一个函数原型,为什么其他源文件也需要它?为什么不能仅仅遵循源文件的原型。对不起我的英语不好
|
|
|
|
如果您有source1.c和source1.h and source2.c以及source2.h那么source1.c了解source2.c中的函数的唯一方式就是包括source2.h。我觉得您缺少了一些关于这些如何工作的非常基本的细节,或者您只是想得太多了。
|
|
|
|
QHB:抱歉,我不能用我的英语明确表达,但我几乎知道编译器是如何对待它的。非常感谢:
|
|
|
|
嗨,除了已经解释过的确保函数原型声明在使用它们的所有地方都是相同的之外,“PIC18F_LCD.h”文件还可以具有宏定义,说明外部信号如何连接到PIC I/O引脚,例如:在PIC18F_LCD.c中将需要:以及命令寄存器代码的定义,这在主C和LCD中都是需要的。
|
|
|
|
因为每个C文件都是独立编译的。编译器生成一个对象文件。链接器然后将对象放在一起以生成最终的输出文件。
|
|
|
|
并写入到LATX,而不是PORTX——如果这是PIC18
|
|
|
|
只有小组成员才能发言,加入小组>>
5255 浏览 9 评论
2038 浏览 8 评论
1958 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3219 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2268 浏览 5 评论
794浏览 1评论
689浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
618浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
687浏览 0评论
587浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 20:39 , Processed in 1.470555 second(s), Total 98, Slave 82 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号