编译器的工作就是将用代码编写的源程序翻译为计算机可以执行的目标程序,例如.c编译后生成.exe
前面会涉及一些基础,可以直接看第四标题的内容
机器语言
计算机刚发明的时候人们通过各种开关和电缆来编写程序。这时候的程序是真正的二进制,例如000110101011。
后来做出了改进,把程序打在穿孔带上,让机器读取。但本质还是没有改变,还是在使用二进制编程。下面举一个例子:
0001表示加
1010表示寄存器a
1011表示寄存器b
那么把a和b的值加起来放在a,就是0001 1010 1011
当时的程序员比大熊猫还稀少,每天脑子里除了0就是1
汇编语言
既然二进制这么难记,人们就想到了给这些指令记一个好记的名字
0001:add
1010:a
1011:b
这样子就变成了,add a b
但计算机太笨了,只能执行二进制,所以汇编器出来了,用来把汇编语言转换为机器语言
高级语言
机器语言和汇编语言一直被统一称为低级语言
人类一直探索一种更高级的语言来写程序。这个语言应该是面向人而不是面向机器。
能使用变量来存放数据,而不是寄存器:int a=10;
能用表达式来表示自己的意图:a++;
能用判断语句来处理分支:if(a>=0) ;else a=-a;
能用循环语句:for(int i=1;i<=100;i++) sum+=i;
能定义一个函数处理一段多次使用的操作:int getmax(){}
编译器的工作就是把高级语言翻译成机器语言
编译器的操作
我们先看看编译的过程: