ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 【知识精讲】C++程序是如何开发的 ## Part1 我们已经知道,程序语言可以分为**机器语言**,**汇编语言**和**高级语言** 三个层次——现阶段我们人类开发者能够直接编写的是汇编语言和高级语言,绝大多数情况下用到的还是高级语言。 高级语言的语句是由一些英语单词、数学公式等构成的——对于程序员来说,这些语句相对来说更浅显易懂,但是机器本身却只能识别 000 和 111 构成的二进制代码(也叫**机器码**)。那么,高级语言是怎么变成二进制代码的呢?这中间就要有一个过程——需要一个“翻译器”来帮助我们完成这些事情。 典型的机器码如下图所示——这里使用十六进制数表示二进制代码: ![](https://res.jisuanke.com/img/upload/20160712/cf2c2dc0f25c12f9cd8197d6e06ec20adb96134f.png) ## Part2 具体地说,我们自己用高级语言写的程序,称为高级语言源程序,而将其转化成二进制代码之后的程序,称为目标程序——它已经是完全的二进制机器指令了,这个过程称为编译。那么,是不是有目标程序就能直接运行了呢?我们需要考虑到,如果一个程序比较大的话,那么它可能要有多个模块来协作——就算是简单地向屏幕上输出一个“Aloha Oe”,你也依然需要调用系统库里定义好的输出功能模块。 所以,我们需要把所有需要的模块都合并在一起,才能构成一个可以执行的程序——这个就是程序的链接过程,链接完成之后,才会得到一个可以执行的程序。那么,你肯定要问:编译和链接过程该怎么进行呢?有一些专门的软件可以完成这个过程,这些软件被称为**编译器(Compiler)** 和**链接器(Linker)**。 在编译和链接的过程中,都会对程序中的错误进行检查——只有代码准确无误的程序才能编译成功。如果代码本身有错误的话编译器就会报错,如下图所示。但是需要注意的是,编译通过,并不代表程序本身是完全正确的——你仍然需要通过调试,确认程序可以正确地运行,才能说你的程序是准确无误的。 ![](https://res.jisuanke.com/img/upload/20160712/9c28db60af3b1f2ae6beaaf5b385ad0395ddcf48.png) ## Part3 除此之外,还有另一种与之类似的软件,称为**解释器**——在介绍什么是“解释器”之前,我们首先要知道“编译型语言”与“解释型语言”的差别。 所谓“编译型语言”,指的是源程序的代码写好之后,编译器直接把高级语言的源代码编译成二进制的机器码,执行的时候直接运行机器码就行了——这门课程学习的 C++ 语言,是一种典型的编译型语言;而“解释型语言”则与之不同,写好的代码不会马上就被翻译成机器码,而是先保存成源程序的代码文件——等到运行的时候,这些语句才会**由解释器来一条一条地解释执行**——很多脚本语言,比如 Python,都属于解释型语言。 一般而言,编译型语言拥有更高的运行效率,而解释型语言的可移植性更好——此外,还有一些介于两者之间的语言,比如JAVA/C#,就是先编译成某种“中间代码”然后再交由不同平台的虚拟机解释执行的。 ## Part4 整个程序开发的过程,可以分为这样的一个流程:设计数据结构与算法->源程序编辑->编译与连接->测试->调试。 在看到这个流程之前,有的同学可能会觉得,要开发程序,就一定需要专用的“编程软件”(学名叫做集成开发环境(Integrated Development Environment),简称 IDE )才行,有的同学可能还见过 Visual C++ 6.0,或者 Dev-Cpp 之类的软件。 ![](https://res.jisuanke.com/img/upload/20160712/31e05715f75de23eaa333096083149794cec52f0.jpg) 一款经典的 IDE Code::Blocks 然而,所谓的 IDE ,其实就是把编辑器、编译器和其他的一系列工具整合在一起的产物——毫无疑问,像 Microsoft Visual Studio 之类的先进的 IDE ,在开发很多大型软件的时候,确实可以几十上百倍地提高开发效率。但是实际上,IDE并不是编程活动的必需品——对于初学者来说,只要有用于写代码的文本编辑器,和用于编译代码的编译器工具链,就已经足够了。 ## Part5 这门课程使用 GNU C++ Compiler 编译器(也叫 g++ ),它可以在几乎所有主流的操作系统上运行——为了便于练习,我们建议大家在自己的电脑上安装和配置相同的环境,然后搭配一款自己喜欢的文本编辑器使用。 Linux 和 Mac OS X 用户可以使用 Vim 或者 Emacs 等,Windows 用户可以选择系统自带的记事本( Notepad )或者第三方的 Notepad++ 。此外,你还可以选择 Sublime Text,Atom 或者 Visual Studio Code 等跨平台工具。这些工具本身各有千秋,如果可能,你都可以试一试,找到你最喜欢、用起来最顺手的那个(编辑器没有“最好”,只有“最适合你”,千万不要太纠结)。 ![](https://res.jisuanke.com/img/upload/20160712/92177cba26c41dc410c101f519be0c981823be9e.jpg) 在Mac OS X 平台下运行的 Visual Studio Code 最后,我们将向大家介绍如何在自己的电脑上编译程序——学完一节代码课之后,你试着在自己的电脑上编译运行一下: ## Part6 首先,在文本编辑器中写好代码,然后保存——类似于 C 语言,所有 C++ 语言的代码都是以`*.cpp`文件的形式保存在你的电脑上的。比如你写了一个程序,想要命名为“AlohaOe”,那么这个文件的名字就是`AlohaOe.cpp`。接下来启动你的操作系统自带的控制台(Terminal或者CMD),然后进入到文件所在目录,输入以下命令: ~~~ g++ AlohaOe.cpp -o AlohaOe ~~~ 其中,第一个参数代表要编译的文件,`-o`代表输出,最后一个参数代表你想要让编译器输出可执行文件的名字——这里你可以随意更改。如果你的程序没有错误的话,那么这条命令执行之后就不会返回任何提示——反之则会报错并指出你的程序在哪里出了偏差。编译完成之后就可以试着运行你的程序了——在命令行中输入`./AlohaOe`或者`AlohaOe`就可以直接启动你已经编译好的程序。