关于对编程语言的一点理解

一、前言

    写过代码的同学一定以下两个困惑:(1)我们用英文字符编辑的一行一行的代码机器是如何运行的?是的,它们是由预处理器、编译器、汇编器、链接器这几个“器”完成的;(2)C++语言、C语言、Java语言等等,这些语言之间到底有什么不同。


二、源程序翻译流程

    那么上面所说的预处理器、编译器、汇编器、链接器应该怎么理解呢?其实对于预处理、编译、汇编、链接我们都还可以根据字面意思进行理解,但是加上一个“器”,难道它真的是一个真实的硬件吗(哈哈,我刚开始是这么理解的)?其实并不是,这些“器”都是一个程序,或者你说它是一个软件也行,也就是说某个东西用这些程序来处理你的程序,把你写的源代码翻译成机器运行指令,那么“某个东西”是什么东西呢?我理解的是IDE(集成开发环境),如我们使用的VS2010等,它包含了这些所有的“器”,来使你的代码运行,器具体流程为:

这个流程表述的非常清楚了,从源码到机器指令的过程。如果要解释每一个“器”的功能,那可能要引伸出很多其他知识点,所以这里只是简单介绍:

(1)预处理器:对源程序进行简单处理、替换,如#include包含的头文件、宏定义等;(文本文件,我们能读懂)

(2)编译器:对预处理后的文件进行翻译,翻译成汇编代码;(文本文件,我们能读懂)

(3)汇编器:对汇编代码进行翻译,翻译成机器语言指令(可重定位目标文件);(二进制文件,我们读不懂)

(4)链接器:链接多个可重定位目标文件,生成可执行目标文件,存储在磁盘上;(二进制文件,我们都不懂)


三、编程语言标准

    好,在看到上面的流程之后,相信你似乎对源程序翻译成机器语言已经有了一个大致的了解,理解了第一个问题。但是对于第二个问题呢?C++语言、C语言、Java语言等等,这些语言之间到底有什么不同?我的答案是他们仅仅是不同的高级编程语言标准,说他们高级,是因为它们是有我们写出来的,那我们自己肯定比机器高级啊,那不然为什么现在人工智能这么火热(当然,机器终究会比我们高级),说它们是编程语言标准,意思是指它是大家写翻译源代码的编译器时都同意(或必须)遵循的守则(标准)而已(这句话一定要认真体会、理解)它们除了语法上的不同,以及谁比谁更好用,功能更多等这些条件外,没有其他的不同。难道不是吗?只要一个人会用C写HelloWord,那他在了解了Java的语法之后,他同样会用Java写HelloWord。

    就算这些语言之间是遵循不同的语法标准,但是它们被翻译的过程还是要经过上面的四个“器”,那到底语法的不同会这样影响上述流程呢?答案是:它只会影响编译器(编译程序)的不同,为什么呢?刚刚不是说了吗?不同的语言标准,也就是大家写翻译源代码的编译器时都同意(或必须)遵循的守则(标准)而已。那为什么汇编器、链接器等不会被影响呢?那是因为编译器输出是汇编代码,而汇编语言是一种通用的语言标准,它作为高级语言与机器语言之间的桥梁,不管高级语言遵循什么样的标准,即不管你是用C++编写的还是用Java编写的或者是其他各种高级语言编写的HelloWorld,只要用它们各自的编译器代码运行,输出的文件都是相同的汇编代码(当然,有可能编译器的处理不一样,优化程度不同,会有差别,但大体是一样的),汇编代码中每条语句都以一种标准的文本格式确切的描述了一条低级机器语言(这句话也要认真理解),也就是说汇编代码也是一个可读的文本,我们能读的懂,只是说如果你不是专门写汇编代码的人的话,你很难读懂,一句话,汇编代码没有C、C++这些高级语言好读。


    熟悉或者使用过Windows API和MFC框架编程的同学,你们是否有百度过这二者的区别?(我反正百度过),结果上面关于编程语言标准的解释之后,这二者有一个区别就是他们所使用的语言标准不一样,Windows API使用的是C语言标准,而MFC使用的是C++语言标准,虽然在使用Windows下的IDE(如VS2010)进行程序开发时好像都能运行,但其实二者是采用不同的编译器标准的,我想可能是在那些IDE中(如VS2010)同时集成了两种语言标准的编译器或者用同一个编译器就能编译C和C++(因为C++本来就兼容了C)。

四、总结

    什么是语言标准:就是大家写翻译源代码的编译器时都同意(或必须)遵循的守则(标准)而已。所以说C++语言、Java语言都是一种高级语言标准,学会了一种语言标准,会按照这个标准写程序,再要去学另外一种语言,那就简单了,因为你只需要写,然后再对应的编译器下编译运行它就可以了。

    用高级语言编写的源程序代码依次经过预处理器、编译器、汇编器、链接器先从人能读的懂的高级语言(源程序代码)被翻译成次高级语言(汇编代码),然后再被翻译成人不能读懂的机器语言指令,这是一个逐渐向低级语言解释翻译的过程。针对编译器和汇编器,想一想,是不是有一点这个意思:编译器和汇编器是做同样的一件事,即把一种高级语言翻译成比原来低级的语言。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值