浅谈C文件编译过程

 

话说总结下C文件编译过程.

首先假设有这么一段经典C程序:

#include <stdio.h> //包含标准输入输出头文件,stdio即standard input&output

int main(void) //主函数,程序入口点

{

printf("Hello,world!\n"); //标准库输出函数,在屏幕打印"hello world!"(不包括双引号)

return 0; //函数返回0值,一切正常,程序结束

}


 

首先将上述程序保存为标准的ASCII文本文件hello.c.

于是乎编译之,系统开始这么处理:

预处理器开始介入,对该文件进行预处理,也即文本替换,把#后面的一大堆替换掉,比如上面那程序中第一行的#include <stdio.h>,直接替换成原来stdio.h的内容,然后保存,现在名字变成hello.i了,于是乎编译器介入.

编译器对那hello.i进行编译,把hello.i的内容从C语言翻译成汇编语言的指令,具体怎么做的暂时先不用管,等你学了编译原理就懂了.

接着汇编器汇编上一步生成的汇编语言指令,生成二进制文件,不过只是半成品,因为他还没有链接各种文件中的函数等等,该文件为hello.o.

最后链接器将彼此有关的目标文件进行关联,比如该程序调用了printf函数,则要链接提前单独编译了的printf.o文件,在经过了种种复杂处理,这里最后才生成机器可以直接执行的二进制文件.当然实际情况往往比这还要复杂得多,这里就不作深入探究了.

C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都非常多,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值