关于编辑器,编译器,汇编器,以及跨平台的思考

关于编辑器,编译器,汇编器,以及跨平台的思考

编辑器的作用

编辑器用来接收键盘输入的字符,比如记事本等,但是这类编辑器没有语法高亮,补全等功能,对使用者不够友好,因此书写代码使用功能更加强大的编辑器会提升效率。

编译器和汇编器的作用

机器识别的是0101011之类的二进制语言(机器语言),但是一般人们用C语言,或更高级语言都是以英文输入,因此输入的代码需要经过一定转换,变成机器可以识别的机器语言。
在这里插入图片描述

  • 编辑器中的代码首先经过预处理器进行处理(比如展开宏定义等操作),生成.i文件,编译器将.i中的代码再次转换成汇编语言形式,汇编器将汇编文件转换成机器语言(即010100之类)。

  • 汇编语言和机器语言密切相关,是面向机器的语言,因此CPU不同的计算机,有着不同的汇编语言,同时在汇编语言转换成机器语言时,也是需要依据CPU指令集的。因此当在一台机器上,源代码转换出来010100011010(随便写的),在这一CPU下这组机器语言可能表示赋值,在另一不同CPU下,这组机器语言可能表示循环。因此转换出来的汇编语言,和机器语言,都不能跨平台使用。

  • 看起来我们可以将源代码在不同平台下重新进行编译汇编等操作,这样获得的机器语言便可以在新平台下运行。但是不同平台下,编译器是不同的,比如windows下常用的VS,Linux下的GCC,C语言的一些具体细节由编译器所决定,因此这造成了一些问题,比如不同编译器下Int类型的字节大小。(又或者关于内联汇编,它的的语法格式与使用的编译器直接相关,也就是说,使用不同的C编译器内联汇编代码时,它们的写法是各不相同的。)因此这也会导致跨平台使用时出现问题。

#编译系统
编译系统小到一个编译器和连接器的命令行脚本,达到一套跨平台Makefile生成的策略。集成开发系统IDE直接束缚了可移植性,比如在windows使用vs开发,由于编译器的问题,在另一平台会由于类型大小等产生一系列问题。因此跨平台的软件开发必须要使用一个标准的可共享的编译系统。因此Makefile是一个很好的选择。

#参考资料
[1]:https://www.cnblogs.com/jmsjh/p/7808764.html

猜你喜欢

转载自blog.csdn.net/m0_37710845/article/details/88625898