博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈C文件编译过程
阅读量:4190 次
发布时间:2019-05-26

本文共 710 字,大约阅读时间需要 2 分钟。

 

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

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

#include 
//包含标准输入输出头文件,stdio即standard input&outputint 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语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都非常多,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的.

 

转载地址:http://eysoi.baihongyu.com/

你可能感兴趣的文章
vue中无缝轮播简单实现
查看>>
ES5和ES6中的类定义区别
查看>>
利用解构赋值快速提取对象参数
查看>>
CSS3简单实现360deg旋转
查看>>
vue中使用H5的audio
查看>>
PHPStorm配置ESlint检查代码
查看>>
树的子结构
查看>>
判断两棵二叉树是否相似
查看>>
二叉树中和为某一值的路径
查看>>
数字在排序数组中出现的次数
查看>>
两个链表的第一个公共结点
查看>>
二叉树的深度
查看>>
MySQL数据库入门(三)
查看>>
MySQL数据库入门(四)
查看>>
关于方法覆盖和属性覆盖的问题?
查看>>
JAVA中ListIterator和Iterator详解
查看>>
目标和
查看>>
跳跃游戏
查看>>
买卖股票的最佳时机 II
查看>>
分发饼干
查看>>