临近开学,相信有一批好学的准计算机相关行业的小伙伴在暑假期间开始自学C语言了。凭心而论,小编觉得python更适合作为初学者第一次学习的语言,他的安装配置以及语法各方面都比C语言易学。但C语言也有其学习的优点,这不是本篇要讨论的内容。今天小编要介绍的,是关于C语言的编译器,以及其中一款比较出名的编译器MinGW的安装。
什么是编译?
我们把人说的话,称为自然语言。同理,机器与机器之间的交流,使用的就是机器语言。我们知道机器与机器之间的交流是通过导线为基础,电流的变化传递的相关信息。通俗的讲,电路中有两种状态,一种是有电,一种是没电。如果用数字0代表没电,数字1代表有电1,那么连续的状态变化,就能转化为一串由0和1构成的信息串。机器与机器之间的交流,就建立在这样的信息串上2。
1. 这里的有电没电是一种比较通俗的说法,实际上应该称其为高电平,低天平。
2.这样的信息串,又被称为机器语言,在计算机中常见的两个处理信息的结构中,内存负责将这样的信息存储下来,方法也很简单,每个内存单元分别记录响应的0和1,这就是内存的存储过程,按一定的顺序将这些0和1读取出来,这就是内存的读取过程。而CPU按一定的间隔读取这些信息串(比如以64位计算机为例,他可以一次读取64个这样的信息串),这些信息串具有不同的效果,有些是指令,比如读到某些串后它就执行加法等等,这些是计算机组成原理的知识,有兴趣可以前往相关手册进行学习。
机器语言中的内容有一部分是固定的指令,我们通过一些助记符(比如ADD,JUMP等)来代替这些固定的指令,这就是汇编语言。汇编语言要运行前需要将这些固定的指令进行替换,这个过程我们称其为汇编。
汇编语言跟机器语言更为接近,人比较难以读懂这样的语言,所以这样的语言被称为底层语言,或者低级语言。我们之前说过,机器语言是跑在不同的机器上的,不同的机器存在着“方言”,也就是说不同的机器对同样的信息串理解是不同的,这也就导致了不管是机器语言还是汇编语言,他只能跑在对应的机器上,在别的机器上需要重新编写汇编代码。
汇编并不是编程的好工具。1972年,丹尼斯·里奇开发出了C语言,这是一种比汇编语言更适合用来编程的语言(在当时确实是如此,但随着时代的变革,后来者以更加易学和更加优雅将前浪拍在了沙滩上),他通过一些符号来表述一个运算过程,这些符号就是代码(c语言的代码,后缀为.c或者.cpp,另外还有.h作为头文件)。这些代码对于人来说是比较易读的,但对于机器来说是完全不可读的,那么怎么将这些代码变成可读的呢?这就要介绍编译器的存在了。
C语言跟自然语言比较接近,而相对远离了机器语言,这种人容易读懂的语言被称为高级语言。编译就是将高级语言转化为低级语言的一个过程。
补充:其实还有另一种转化方式叫解释,编译和解释的区别是:编译一次性将所有的高级语言翻译为低级语言,解释一句一句的将高级语言解释为低级语言。著名的解释型语言有JavaScript,python。Java的字节码在jvm上也是解释执行的。
什么是编译器?
编译器就是用来将高级语言转化为低级语言的程序。
最流行的C语言编译器有以下几种:
- GNU Compiler Collection 或称 GCC(GCC编译器的Windows版本被称为MinGW)
- Microsoft C 或称 MS C(也叫MSVC)
- Borland Turbo C 或称 Turbo C
这些C语言版本不仅实现了ANSI C标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。
GCC是类Unix操作系统(Linux,macOS,BSD等)所用的编译器,MSVC是Windows所用的编译器,编译的结果不能混用,也就是说使用MSVC编译的可执行文件是不能在linux上运行的(另外linux的可执行文件也不是.exe)。
怎么安装和使用这些编译器(Windows平台下)?
MSVC只能在Windows平台下安装,安装方式也是比较简单的,直接安装visual studio全家桶(举几个常见的例子,visual C++6.0,visual studio2010,visual studio2017都有该编译器),就会附带MSVC编译器,一般来说直接使用VS全家桶就可以达到很不错的学习效果,但如果你想要单独使用代码编辑器加编译器的开发方式,可以参考这篇文章:VSCode配置C++环境的方法步骤(MSVC)
MinGW的安装也是比较简单的,如果使用codeblock的话有些版本是有自带MinGW的,可以直接使用这些MinGW,在这篇文章VSCode配置C++环境的方法步骤(MinGW)中两款工具也都提供了MinGW的下载,想单独使用代码编辑器+编译器的开发方式也可以直接参考该文章。接下来我们讲讲如何单独安装MinGW。
下载链接:sourceforge
下载后直接按照要求安装即可。
注意,下载的是安装器,安装器本体比较小,需要联网获取MinGW的本体,整体安装大概需要400M到600M左右,版本不同大小也不同。
安装完成后可以在安装路径下找到MinGW64的文件夹,将其中的bin文件夹添加到环境变量中即可。
囿于篇幅原因,MinGW的详细安装部分小编放在单独的一篇文章中介绍,小伙伴可以前往:如何安装MinGW?GCC编译器安装教程!查看
编辑代码
使用记事本或者代码编辑器写一段程序(这里不推荐使用记事本,小编使用vscode)。
首先通过命令行进入你准备要创建文件的目录下进行后续操作。
编译过程
编译过程分为四个步骤:预处理、编译、汇编、链接。
1.预处理
预处理主要处理源文件中的“#include”、“#define”等预处理命令。
预处理主要完成的工作有:
(1)删除#define,展开宏;
(2)处理条件编译指令,预处理程序先判断条件,在根据条件修改源代码;
(3)删除注释;
(4)添加行号,以及文件名标识,便于调试
(5)删除“#include”,插入相应的头文件;
使用g++ -E test.cpp -o test.i
命令,预处理后得到test.i
文件
2.编译
生成汇编代码的过程,使用命令g++ -S test.i -o test.s.
生成汇编文件test.s
文件,当然直接从test.cpp
文件得到汇编文件也可以。
3.汇编
将汇编代码转化成机器指令,生成目标二进制代码。
使用命令g++ -c test.s -o test.o
生成test.o
文件
4.链接
通过链接库文件,将目标文件转化成可执行文件
使用命令g++ test.o -o test.exe
当然,一般情况下,可以直接使用g++ test.cpp -o test
就可以生成可执行程序了。
运行程序
最后使用命令test.exe,即可运行程序。
也可以直接点击exe文件进行运行。
编译器使用小结
通常情况下我们并不会手动编译,而是借助代码编辑器的插件功能(比如上面介绍的vscode)或者IDE集成化项目构建,但是手动编译的技术也是相当重要的,小伙伴们应该学习一下。
总结
以上就是关于C语言编译器的全部介绍,希望能对各位小伙伴有所帮助。