找回密码
 注册
关于网站域名变更的通知
查看: 286|回复: 4
打印 上一主题 下一主题

ARM中.c文件和.h文件有什么区别?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-3-28 09:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
ARM中.c文件和.h文件有什么区别?
% [& t! Y4 y: ]5 F

该用户从未签到

5#
发表于 2022-3-28 13:45 | 只看该作者
编译器在编译时是以C文件为单位进行的,也就是说如果你的项目中一个C文件都没有,那么你的项目将无法编译,连接器是以目标文件为单位,它将一个或多个目标文件进行函数与变量的重定位,生成最终的可执行文件,在PC上的程序开发,一般都有一个main函数,这是各个编译器的约定,当然,你如果自己写连接器脚本的话,可以不用main函数作为程序入口!
" X1 n* m2 V0 `3 W" x

该用户从未签到

4#
发表于 2022-3-28 13:23 | 只看该作者
1.预处理阶段0 a5 u  z6 C$ L; Q: a0 K, R
2.词法与语法分析阶段; z8 W& Q. R) {6 E
3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件
1 O. g% l+ s. }% a* B4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息
; N: e& O) z% I7 }) |" S! u3 Q8 z* n1 n7 V7 D

该用户从未签到

3#
发表于 2022-3-28 11:21 | 只看该作者
1.预处理阶段:编译器以C文件作为一个单元,首先读这个C文件,发现第一句与第二句是包含一个头文件,就会在所有搜索路径中寻找这两个文件,找到之后,就会将相应头文件中再去处理宏,变量,函数声明,嵌套的头文件包含等,检测依赖关系,进行宏替换,看是否有重复定义与声明的情况发生,最后将那些文件中所有的东东全部扫描进这个当前的C文件中,形成一个中间“C文件”8 C- |: C' T9 g" m4 e7 v; u
2.编译阶段,在上一步中相当于将那个头文件中的test变量扫描进了一个中间C文件,那么test变量就变成了这个文件中的一个全局变量,此时就将所有这个中间C文件的所有变量,函数分配空间,将各个函数编译成二进制码,按照特定目标文件格式生成目标文件,在这种格式的目标文件中进行各个全局变量,函数的符号描述,将这些二进制码按照一定的标准组织成一个目标文件" v7 \+ J* C7 t7 f7 C% i* p
3.连接阶段,将上一步成生的各个目标文件,根据一些参数,连接生成最终的可执行文件,主要的工作就是重定位各个目标文件的函数,变量等,相当于将个目标文件中的二进制码按一定的规范合到一个文件中* }( z$ n, e3 s9 {* P! k

该用户从未签到

2#
发表于 2022-3-28 10:36 | 只看该作者
为了生成一个最终的可执行文件,就需要一些目标文件,也就是需要C文件,而这些C文件中又需要一个main函数作为可执行程序的入口,那么我们就从一个C文件入手,假定这个C文件内容如下:
+ Z  x3 O5 R8 x, C: \# h#include <stdio.h>
) s* t* K/ O% Y#include "mytest.h "
* k. c% I8 H1 r" S9 C  ?* B, H
  t' e% K6 P  y6 T( U) ]1 `int main(int argc,char **argv)+ v, y* K: C6 i, z' A6 ]: U5 G
{
( [. V' k4 J8 W* b: ]$ b; \  _test = 25;
3 p4 A8 \+ m& s# y9 ]# |printf( "test.................%d\n ",test);4 ~' a) i5 j9 d& w
}2 @) ]) Y3 \* A8 L
) u4 x# L& z9 o2 |9 k" H
头文件内容如下:1 |  J+ P( U) T
int test;
# }7 T# ?/ D1 I  e9 Y0 x$ x8 Z& ~4 |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 22:59 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表