大家好,欢迎来到IT知识分享网。
c语言从头开始(三:编译器工作原理)
——————
以gcc编译器为例子,编译实际上总共经历了四个阶段
预处理—>编译—>汇编—>链接
1.预处理
预处理就是对源代码进行文本处理,对开头**除空白外第一个字符为#的代码行**进行处理。
例如:
“`
#include<stdio.h>
“`
前面说过这个是标准输入输出头文件,读到这行代码时,从编译器的内置查找路径的根部开始查找stdio.h文件,读取其内容,并把它直接插入到程序文本前面。
stdio.h是编译器内原本就有的头文件,像类似的还有很多,比如math.h和string.h等等。当然,我们还可以自己编写头文件,头文件的后缀是xx.h,并把它当前代码文件所在目录。我们要用就可以直接通过下面代码使用
“`
#include “xx.h”
“`
还有宏定义
“`
#define XX YY //把XX定义为YY,也就是下面代码所以出现的XX就相当于YY
“`
在cmd命令行中输入
“`
gcc -E xx.c -O xx.i
“`
打开就可以看到我们的源代码前面多了很多东西
2.编译
将文本文件hello.i翻译成文本文件hello.s。我们在cmd命令行中输入
“`
gcc -S xx.i -o xx.s
“`
没错,可以看到代码被编译成了汇编语言。
3.汇编
代码已经被编译成为汇编语言,那么下一步应该干什么?
没错,在把它更进一步,变成机器语言,也就是01组成的二进制文件,继续打开cmd
“`
gcc -C xx.s -o xx.o
“`
但是,它是二进制格式,无法直接查看,可以用反汇编器来查看它的编码:objdump –d xx.o
4.链接
最后一步就是链接了
“`
gcc xx.o -o xx.exe
“`
我们看到了我们熟悉的.exe文件。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/56873.html