你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

谁知道keil .c 和.h 文件的大概的编译过程,我们都知道...

[复制链接]
wwwheihei 提问时间:2018-8-16 16:58 /
阅读主题, 点击返回1楼
收藏 评论22 发布时间:2018-8-16 16:58
22个回答
wwwheihei 回答时间:2018-8-17 08:22:46
安 发表于 2018-8-17 08:19
.h中一般加了ifndef的是才进行编译,所以编译只有一次。一般是从编译.c开始。比如编译的第一个文件是led.c ...

有没有相关的资料,详细讲解这部分的文章或者pdf
stm1024 回答时间:2018-8-17 09:21:18
为了把问题说清楚,我觉得有必要区分一下编译和链接。
编译的时候c文件编译过程中,会把同名头文件一起编译进去,最后会得到.o的文件,在这个阶段,编译器会把所有的函数都编译进去,并分配一个函数入口地址。
在链接的时候,会根据实际程序的调用,将这些函数都拼接在一起,用到的才会被拼接起来, 没有用到的就不管,最后打包成了hex或者bin文件,所以你看每个项目,output文件夹都是几十M的,但实际bin或者hex文件才一两百k。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

hellole 回答时间:2018-8-17 10:41:38
编译过程内核启动BootLoader,c程序由main()函数进入,
所以编译时会根据main所用到的从.h文件去寻找相关

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wwwheihei 回答时间:2018-8-17 11:16:57
hellole 发表于 2018-8-17 10:41
编译过程内核启动BootLoader,c程序由main()函数进入,
所以编译时会根据main所用到的从.h文件去寻找相关 ...

编译打印不是你说的这样
44.png
wwwheihei 回答时间:2018-8-17 11:19:26
stm1024 发表于 2018-8-17 09:21
为了把问题说清楚,我觉得有必要区分一下编译和链接。
编译的时候c文件编译过程中,会把同名头文件一起编译 ...

谢谢大神指导
butterflyspring 回答时间:2018-8-17 11:56:58
这跟ide有关呀

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Inc_brza 回答时间:2018-8-17 17:08:01
其实楼上各位说的有对也有错,如14楼所说,需要区分下编译,链接,但是我想补充一下,最好区分一下
预编译,编译,链接。
不管是h还是c文件,其实作用都是一样的,没有什么头文件和源代码文件区分,当然这个理解是基于编译器的,而不是对人的,所以看官别看了就开始喷。例如,我可以再c文件里包含c文件,也可以再h文件里包含c文件,可以再h文件里包含h文件,当然c文件也可以包含h文件,随你喜欢。
预编译,其实就是编译器会先把所有文件中的宏都给展开,这里包含条件编译,常量等等,各位看官也可以再自身的编译器中查看list文件,这是预编译后产生的文件。
然后再进行汇编,把所有的源代码(这里不指明是c还是h,应该可以说是都存在),生成.o文件,
接下来进行链接,最后生成总的hex或者elf或者axf之类的格式文件,当然可以再生成bin文件。
最后 补充的就是,以上这个过程,不管是什么平台,什么ide,什么编译器,都是一样的步骤。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

wwwheihei 回答时间:2018-8-17 17:33:14
Inc_brza 发表于 2018-8-17 17:08
其实楼上各位说的有对也有错,如14楼所说,需要区分下编译,链接,但是我想补充一下,最好区分一下
预编译 ...

版主说的很对,很有启发,谢谢

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版