C语言历史相关与环境配置
一些历史梗概
世界上第一台通用电子计算机ENIAC(Electronic Numerical Integrator And Computer)诞生于二战后的1946年2月14日。彼时的这台计算机体积庞大,重量惊人。这是人类历史上第一台可以编程的电子计算机。
ENIAC包含了17468个电子管、7200个晶体二极管、1500个继电器、10000个电容器,还有大约五百万个手工焊接头。它的重量达27吨(30美吨),体积大约是2.4m×6m×30.48m(8×3×100英尺),占地167平方米(1800平方英尺),重30英吨,耗电150千瓦。
来源于维基百科
这样的计算机放在如今家用PC横行的时代,一个正常的消费者都负担不起。这样一台需要庞大的人力物力的计算机,他每秒的运算能力为每秒五千次加减运算(实际上因为并发能力可以更高)。
而后来我们的工程能力飞速的发展,如今已经可以制造出远超这台计算机性能,且占地面积即小的设备。例如笔者撰文的2020年,手机,电脑,手表,这些走入千家万户带给人们极大生活便利的计算机,都已经远超ENIAC。而进行ENIAC同样的核心功能,即加减法运算的逻辑芯片,这样的芯片甚至可以一百平方毫米的面积内,集成上百亿颗晶体管。
毫不夸张的说,只需要指甲盖那样大小的面积,我们就能做到千倍于七十年前需要167平方米才能达到的计算能力。
如此庞大与渺小的落差,或许正是“微型计算机”这样称呼的来源,以至于家用电脑常被叫做“微机”,学校的电脑课叫做微机课。
然而不得不提的是,在当时的人们必须在远没有如今性能的设备下工作,而我们整个计算机行业正是以他们的这样那样的工作为基石的。这些基础性的工作,影响一直流传在如今的整个计算机行业当中。
C语言正式发行于1972年,距离ENIAC有16年。C语言的两位开发者开发C语言时使用的计算机PDP-11距离我们如今常见的家用计算机依然有相当的距离。最明显的差距就在于,当时的电脑价格高昂,体积依然相对较大,最有甚者,他们没有如今几乎是标配的图形用户界面。
不论是如今打开电脑就能看到的桌面,还是各种炫丽的动画效果,或者熟悉的任务栏软件图标。虽然在1973年施乐公司就已经有十分接近的设计,然而在个人电脑上,这些要到八十年代才能在某个常给人“Amazing”的公司推出的一款特别昂贵的电脑上见到。
GUI(Graphic User Interface),即图形用户界面
总的来说,图形用户界面只是计算机的一个衍生品。很多人会因为各种信息的误导,以为学习编程就可以做出如今计算机上各种好看灵活的软件。
而实际上,计算机是用来进行计算的一种工具,在计算机刚开始的那段时间里,我们能看到的是各种各样的显示设备,例如阴极射线管、辉光管、打字机等等。编程语言在出发点上往往就不会考虑图形,而是考虑怎样计算。在学习编程语言的起步阶段,虽然有很多教程会为了一定的趣味性,提供一些操作图形界面的方法,但是计算机实际上是用来进行计算的一种工具。而在计算机意义上的图形,其实也是某种形式的被计算机计算的数据。
得益于计算能力的飞速发展,对于图形的处理也越来越强大(实际上家用带有图形界面的电脑大部分计算力都花费在图形上了),计算力的提升让很多事情变得不太一样了。
C语言环境配置
“万丈高楼平地起。”
虽然C语言是一门相对老旧的语言,但是对于如今愈发复杂的计算机系统来说,它或许是被广泛使用的工具中学习较为简单的一种。
因为计算机的复杂性,我们常常会把冗杂的知识包装成某个简单的概念,然后形成一个类似“楼层”的结构。或许下面的楼层会设计得很复杂,但是上面楼层的人大多数时候只需要安心布置好自己的房间即可。
C语言和其他类似的编程语言一样,是一种标准化的交流技巧,是编写者用来和计算机打交道的工具。就好像你需要别人帮你拿一杯水,就会对那个人说:“可以帮我拿一杯水吗?”,或许他会说:“可以,但是我拒绝。”,又或者会帮你拿过来一杯水,再或许他完全就不搭理你。
这个过程中你是把自己想要表达的意思用另一个人能理解得语言表达出来,然后另一个人理解了你的意思,并做出了一定的回答,编程语言所起到地就是类似的这其中语言的作用(不过大多数时候你都得在计算机中以文本的形式写下来)。
但是遗憾的是,即使是今天的计算机也仍然没有聪明到直接读懂C语言,我们还需要额外的几个步骤。
能直接理解我们的编程语言的其实是编译器,然后编译器会将你写好的C语言文本翻译(实际上应该说成是编译)成操作系统能够理解的程序,然后操作系统会负责审核这个程序并且向计算机传话,然后尽量完成你编写的C语言程序中的要求。
虽然这个过程其实有大量的工作,不过你只需要做有限的几件事:
- 首先需要安装一个编译器。
- 编写一段符合语法且合乎逻辑的语言。
- 让编译器进行翻译(编译)。
- 让操作系统帮你运行。
- 在步骤3和4的时候,可以去泡杯茶。
下面会以安装了Windows 10的Intel平台上为例,更详细地讲述。
编译器
编译器的职责是将一个写好的程序,经过一些处理后,再生成一个可以直接在目标计算机上运行的程序。安装编译器其实和一个正常安装的软件没有太大的形式上的区别,编译器本身也是一个软件,只不过他是制造软件的软件。
在C语言被发布的时候,就连带着发布了一个简单的C语言编译器。不过随着时代的发展,以及许多编译器的竞争角逐之后,现在值得选择的C语言编译器只有有限的几个,例如发布Windows 10的软件公司Microsoft所发布的Microsoft Visual C++,又或者Apple公司发起的Clang,再或者由FSF(Free Software Foundation)负责维护的GCC(GNU Compiler Collection)。这三者是我所知的最为广泛使用的C编译器,又因为笔者大多时候使用GCC,所以会以其为例进行下面的讲述。
因为GCC并不是为了Windows系统设计的,所以我们要安装的是后来被移植到Windows上的版本,MinGW(Minimalist GNU for Windows),并且MinGW与其他软件一样,分为32位和64位,下面会提供安装链接:
MinGW32下载
MinGW64下载
实际上,上方的下载链接只是下载了安装程序,具体的安装过程可以使用搜索引擎搜索,或者点击这里。
编写程序
假设你已经安装好了编译器,并且按照互联网上的教程配置好了环境变量那么就可以开始动手编写你的第一段程序了。
首先你需要一个编辑器,比如Windows自带的记事本。你可以在开始菜单中输入notepad
或记事本
找到他。
最简单的C语言程序,可以非常简单。
int main()
{
return 0;
}
只需要这样,就是一个合乎语法逻辑的C语言程序了,你可以在你的记事本中输入下面的内容,或者干脆复制粘贴进去。你看到的代码或许会有一些特殊的颜色,让他看上去还挺好看的。这是因为语法高亮的缘故,在后面的内容中他或许会成为你重要的帮手。
不过上面的代码在有些书上(尤其是一些大学课本),会写成下面的形式:
void main()
{
}
或者
main()
{
}
尽管在早期的一些写法中,后面两种写法也是正确的,甚至现在的一些编译器也可以正常的编译这样的程序,但是从现在通行的标准来说,第一种写法才是正确的。如果要更完整一些的话,你可以写成:
int main(int argc, char *argv[])
{
return 0;
}
当然,暂时你没有必要在main
后面的括号中写上东西。
虽然这样已经是一个完整的程序,但如果只是这样写的话,或许你会觉得你的计算机对你不理不睬。所以为了让他听你的话做一些事情,你还得加上一些内容。
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
在记事本中写好后,你可以在左上角的“文件”下拉框中选择“另存为”,你可以将它保存在任意一个你喜欢的位置,并且给他取个名字,例如Hello
。但是请注意,你需要在Hello
后面加上.c
的后缀。(注意有一个“.”)虽然这不是必要的,但是推荐你这样做。如果你想知道具体的原因,那可以去了解一些关于扩展名的知识。
编译
正如上文所说,编译器可以把C语言程序编译成操作系统能够理解的程序。但是在这之前,你得先让编译器知道,需要被编译的C语言程序在哪里。
于是我们不得不万分无奈地加上编译这个步骤。
首先请打开CMD,这是一个能直接操作Windows绝大部的软件程序。要打开他,请在开始菜单中找到它;或者在键盘上按先后顺序摁下“Ctrl”+“R”这两个键,然后输入CMD
,然后回车(Enter键),CMD就会启动了。它一般长这样:
然后你需要找到你刚刚保存文件的位置,例如你保存在“F:\MyFirstC\”这个文件夹内。
于是接下来你需要手动在CMD中键入命令:
cd "F:\MyFirstC\"
请把“”
中的内容替换成你保存的文件夹。
因为一些原因,你还需要输入一下你保存文件的磁盘,例如我这里是在F
盘(记得加上引号):
F:
接下的步骤请确保你的文件在你输入的目录下,并且你确实按照有效的教程安装好了MinGW,而且配置完成了**环境变量**
或许你可以输入一次命令来测试一下有没有完成,如:
gcc -v
如果出现的是一大串不明觉厉的阿拉伯数字、拉丁字母,以及一些符号组合,那么接下来的步骤基本上都可以继续。
还是CMD中输入:
gcc Hello.c -o Hello
如果前面你取的文件名字和我的Hello.c
太不一样,那你输入的命令就要换成那个名字。
这时候,如果你在CMD中输入:
explorer "F:\MyFirstC\"
还是一样的,不要照搬我写的内容。
接着,你就会发现文件管理器直接打开到了explorer后面跟着的那个串文字所表示的文件夹,同时如果是你保存C程序的文件的话,你会发现,文件夹下除了你刚刚写好的代码文件外,还有一个同样名字的文件。不出意料的话,这就是你所编写的程序所生成的软件了。
可惜的是,它没办法像其他软件那样,双击之后出现一个漂亮的界面。如果你眼睛仔细,会发现双击后会有一个黑色的框一闪而过,而这个黑框中会呈现你这个程序运行的结果。
当然,如果你想它闪的不那么快,有很多方法,不过我们可以直接在CMD中运行它。
还是刚才的还未关闭的CMD中(如果你已经关闭了,那就得从新打开一个CMD,然后输入上面打开CMD后输入的的那两条命令)
接着输入:
.\Hello
注:把“Hello”换成你刚才自己取的名字。
然后你就能看到最终的结果了:
不得不承认,这是一个十分简陋的程序,不过这也是许多程序员第一次编程所写的程序。
“乘风破浪会有时,直挂云帆济沧海。”