(宇宙最强C/C++编译器)乐创DIY C语言讲义​——2.6 GCC的使用

2.6 GCC的使用

有些同学可能会疑问,之前我们还说我们的C语言编译器用的是一个叫做“MinGW”的软件,怎么到后来又出现了一个叫GCC的软件,这个GCC又是什么东西,然后就顿时一脸懵。GCC之前简单介绍过,它是用来开发GNU C语言的编译器,这个GNU C说的通俗易懂一些就是Linux底下的C语言开发,之前我们说了,目前市面上的C语言编译器,要么是完全不区分C语言和C++的MSVC,要么是老到掉牙的Borland C,但就Borland C来说吧,它支持的最多也就C89,而且可能还不完全支持,因此在开发的时候会很麻烦,也不建议用。剩下来的,就只有是每个版本的C语言支持都非常不错的GCC了。还有一个问题,GCC只是Linux操作系统下的一个编译器,难道我们还要为了一个编译器而放弃了人性化的Windows去安装一个不那么适合个人使用的Linux?因此GNU里面有一帮人不肯放弃Windows市场这么大的蛋糕,开发了MinGW这个软件,其实就是Windows底下的GNU C编译器,当然支持C++也是必须的。

大家没有IDE时候,可能一开始有点不习惯,但是坚持用一段时间,你就会爱上文本编辑器+编译器的模式了,不管是编译速度还是编译时的界面而言,这都方式都比IDE炫酷,毕竟再怎么样也是免费的,是吧。

这里再来讲一下终端,可能绝大多数同学以前只使用过Windows底下的“CMD”,即“命令提示符”,我还听过有人把它叫做DOS界面等等。而在Linux里面有一个长得差不多的东西,叫做终端,或者控制台等等。如图2-6-1所示。

图2-6-1 Windows下的“命令提示符”和Linux下的“终端”

看图2-6-1上的两张图片都是黑不溜秋的界面,两个东西难道不一样吗?其实啊,这两个是完全从设计哲学角度就不一样的东西。我们先来说终端,这个终端是Linux从Unix时代继承过来的产物,可能现在提到计算机,大家第一反应就是应该像笔记本或者台式机一样的东西,很小巧,每人一台在办公室办公。其实早期的计算机生成成本太贵,体积太大,都是以小型机或者大型机形式存在的,可能每个公司也就一台,其他用户都是使用串口插到这台大型机上面来工作的,他们面前只有一个叫做“终端”(或者控制台的设备,上面跑的程序叫做Shell)档或者其他办公,因此Unix最早期的设计哲学就是中心化数据处理的多用户多任务操作系统,而Linux完美继承了这一点。这种方式是不是有点类似于现在的服务器架构?这就是为什么,其他领域Windows都比Linux占优势,就是服务器领域这块蛋糕一直在Linux嘴里。后来由于Linux操作系统引入了GUI,而这些GUI都只是Linux系统里面的一个进程,真正的Linux还是那个终端。如图2-6-2所示。

图2-6-2 历史上的“终端

而Windows不一样,Windows诞生之初,个人电脑的业务就已经开始蓬勃发展,而他们最早为IBM PC开发的DOS系统叫做MS-DOS,当时有很多版本的DOS,微软的DOS只是其中一个,顺便说一下,DOS都是单用户,单任务操作系统,仅仅是为了用户操作磁盘里面的数据和软件而设计的。后来微软真正独领操作系统风骚的,是其推出了Windows,其实Windows界面和最早只是DOS里面的一个程序而已,用过Windows95的就知道,开完机电脑呈现给你的是一个命令行,要输入一长串命令才可以进入操作系统,这种机制直到Windows XP才被取消,Windows成为真正的Windows。理所当然,由于某些用户的习惯“DOS界面”下来了。

DOS和Shell的区别大致如下。

1,shell区分大小写,DOS不区分大小写;

2,一般而言,shell的命令的开关可以简写(比如说“-a -l“可以简写为“-al“),而DOS的则不允许;

3,在脚本编写上的语法差别极大,比如说:两者的流程控制语句语法不同,变量的语法不同等;

4,shell可以在UNIX、GNU/Linux和Win下(cygwin bash shell)工作,DOS则还没有听说过能在Win/DOS以外的系统中工作;

5,shell原生支持正则表达式,DOS则不是。

后来Windows 7之后,微软也在个人操作系统上面加入了一个叫做“Power shell”的软件,而我们之前VS Code里面自带的终端软件就是Powershell。以上就是Shell和命令提示符的介绍。

Shell命令在操作时,输入命令的格式为:命令参数1 参数2 … 参数n。来看之前常用的编译命令“gcc -o hello helloeorld.c”如图2-6-3所示。注意,在shell里运行GCC一定要区分所有大小写。

图2-6-3

GCC的参数功能还有很多,我们再一起来看几个。如图2-6-4所示,这个表只是罗列了几个常用的参数,如果有其他新参数需要使用,我们到时候再说。注意一下图2-6-3里面的参数1就是我后文中所说的“选项”,这两个是一回事情。

图2-6-3 GCC常用选项

还是以之前的helloworld.c为例子,我们之前说到,一个程序的编译分成“预处理”->“编译”->“汇编”->“链接”这四个步骤,接下来我们用gcc一步步来看一下他们所产生的中间文件。

(1)        只激活预处理,不进行后续三步,此时使用的命令应该为“gcc -E ./helloworld.c > propress.c”,这个功能需要将预处理完成之后的文件存储到一个新的文件里面,我们这里使用了“propress.c”这个名字。如图2-6-4所示。

图2-6-4 gcc预处理命令

(2)        只做编译,不进行后续步骤。此时使用的命令应该为“gcc -S .\helloworld.c”,运行完成后,编译器会在当前文件夹里面输出一个名叫helloworld.s的文件,它就是GCC生成的汇编语言。如图2-6-5所示。

图2-6-5 gcc生成汇编语言文件

(3)        只生成目标文件,不进行后续的链接步骤。此时使用的命令应该为“gcc -c .\helloworld.c”,运行完成后,编译器会在当前文件夹里面输出一个名叫helloworld.o的文件,它就是GCC生成的目标文件。如图2-6-6所示。VS Code一开始可能无法打开二进制文件,大家需要去应用市场自行下载一个叫“binary”的插件

图2-6-6 目标文件

(4)        最后一步就是利用gcc生成最后的可执行文件,使用命令“gcc -o helloworld helloworld.c”最终会生成可执行文件helloworld.exe,注意此时的.exe后缀名是自动加上的,可以隐藏。

此外,如果大家对终端操作起来还是觉得不习惯,有一个叫做Dev Cpp的软件也是个集成MinGW的IDE,大家可以自己去尝试。

++++++书籍推荐++++++

推荐指数:

推荐理由:刚刚又朋友私信我,说学校的微机原理学不会,听不懂,那你一定要看看这么书,可以说是中国微机原理最好的一本书,没有之一.

(0)

相关推荐