C++是一门强大而灵活的通用编程语言,因其效率高和可移植性强 而广受欢迎。******
C++是C语言的增强版本,在兼容C的基础上,新增了*********在必要时,我会对C语言部分做详细介绍。
作为本书的第一章,首先,介绍一些基本概念;接着,讲解一段非常简短的C++源代码;然后,介绍几款功能强大且容易使用的开发工具;最后,向大家演示如何利用工具将源代码生成可执行程序。
1.1 基本概念
- 源文件(source file):是源代码文件的简称。一个C++项目通常包含多个C++源文件,每个C++源文件通常以.h或者.cpp结尾 。源文件里面包含一系列用编程语言编写的计算机指令,这些指令称为(源)代码。常见的编程语言有C、Java、PHP、JavaScript、C++、Python、Shell、Ruby、Objective-C、C#等等。
- 可执行文件(executable file):也是一种文件,可以让计算机完成特定任务。windows中常见的可执行文件名通常以.exe结尾(俗称exe文件)。
- 编译器(compiler):是一个或者一系列的计算机程序。它可以把源文件转换成目标文件。目标文件通常包含一系列二进制数 。
- 链接器(linker):也是一个计算机程序,可以把一个或者多个目标文件组合成可执行文件、库文件、或者其他目标文件。我们写的绝大多数的程序,几乎都是为了得到可执行程序。
源文件1和源文件2经过编译过程,得到各自的目标文件。目标文件通常以.o或者.obj结尾。然后再通过连接器把目标文件经过链接过程,生成可执行程序。有时候,在链接过程中,连接器会把其他所需文件,如:标准库中的iostream库文件,连同目标文件一起链接到程序中。
源文件1和源文件2经过编译过程,得到各自的目标文件。目标文件通常以.o或者.obj结尾。然后再通过连接器把目标文件经过链接过程,生成可执行程序。有时候,在链接过程中,连接器会把其他所需文件,如:标准库中的iostream库文件,连同目标文件一起链接到程序中。
1.2 Hello Word!
在编写"Hello World"代码之前,先看一段及其简易、什么也不做的代码:
1 int main(){
2 return 0;
3 }
代码前面的序号1,2,3表示代码的行号,只是为了便于讲解,它们不应该出现在你的代码中。代码1~3行定义了一个函数。为了表明某个代码片段是函数,函数的函数名后面通常有一对圆括号。在这里,因为函数的名字是main,所以我们把这个函数称为main函数或者主函数(main是"主"的意思),int是当前函数的返回值类型,它是单词integer的缩写,表示整数类型,简称整型。返回值类型通常写在函数名的前面,二者之间用空格隔开。函数名后面的花括号部分,叫做函数体。函数体里面有一条语句——return 0;(代码第2行)。语句通常以分号结尾。这条语句的开头含有return关键字,所以又把它叫做return语句。
main函数是程序的入口,它指定了程序开始执行的位置。用于产生可执行文件的所有代码中,有且只有一个main函数 。
代码执行完第2行就会返回(因为该语句中有个关键字return),语句return 0;表示返回一个整数0。数值0与main()函数前面的int遥相呼应,一般情况下,return语句后面值的类型和函数前面的返回值类型一致或者兼容。
如果程序正常结束,程序会执行完return语句,并返回整数0;否则,会得到其他标识程序结束的值,而且语句return 0;也不会被执行。
return语句前面的空白是通过按下Tab键产生的。敲击一次Tab键可得到由四个空白符(即:空格)构成的制表符。按下"shift + Tab"键或者Tab键,可以在代码中产生缩进,以方便阅读。每一行结束位置处,按下回车键,可在新的一行继续输入。
现在,我们开始编写第一个程序——“Hello World!“应用程序。
该程序运行后,会在控制台中显示一条文本信息,信息内容为"Hello World!”(不包括双引号)。代码如下:
1 // 文件名:HelloWorld.cpp
2 // 在控制台输出Hello World!字符串
3 #include
4 using namespace std;
5
6 int main(){
7 cout << “Hello World!”;
8 return 0;
9 }
代码中第1行和第2行均为注释,因为这两行都有双斜线(//)。注释范围从双斜线后面第一个字符开始,到该行结束为止。被注释的部分,不会被编译到目标文件中,不论被注释的内容有多少,都不会影响目标文件的大小。双斜线后面的内容用于注明代码的功能,也可用于代码修改,例如:在某行代码的前面加上双斜线,注释掉整行代码,这样该行代码就不会被编译。或者在编写新的代码行时,将思路写在代码中,并用双斜线注释,之后再根据文字逐行编写代码。
第7行cout << “Hello World!”;是代码的核心成分。cout是控制台输出(console output) ,双引号(”")中间的Hello World!是要在控制台窗口中显示的文本信息(双引号不会显示在窗口中)。因为Hello World!在双引号里面,所以我们把它称作字符串。例如:"123"表示字符串123,"ABC"表示字符串ABC,"A"表示字符串A,"0"表示字符串0。cout和被显示内容之间的两个连续小于号(<<),表示把右边的字符串插入到输出流中。该行末尾的分号(;)表示该语句结束。
为了让cout关键字被正确识别和解释,还需要在代码中包含输入输出流文件,并使用标准名字空间。分别见代码第3第4行。因为输出流文件会告诉编译器如何将<<后面的内容显示到控制台窗口,而它的实现部分在标准名字空间中。
#include 告诉预编译器:请把一个名为iostream的输入输出流头文件包含进来。using namespace std;用来限定cout,告诉编译器,如果你找不到cout的定义,请从标准名字空间中寻找 。如果你在代码中忘记使用标准名字空间(漏写第7行),编译器会因为不认识cout而报错。如果你对"包含头文件"和"名字空间"比较陌生,不要紧,我们会在本书的后续部分逐一解释。现在只需要知道,在学习本书代码的时候,记得写上这两句就可以了 。
第5行是空白行,通过敲下回车键就可以实现。与制表符作用相同,都是为了美化代码,让代码更容易阅读。用空白行分割代码片段,可以让代码看起来更有段落感。
在编写代码时,需要注意的是:除了代码中被注释的部分可以使用汉字和汉语标点符号外,其余的部分,均使用英文状态下的字母和标点符号。编写代码时,还要记得将输入法切换到英文状态,而且还是半角英文状态 。
1.2.1 开发工具
工具的好坏往往意影响着工程进展的快慢,一款性能良好的开发工具可以显著提升代码编写效率。Windows下的开发工具有很多,当前C++开发使用频次最多的还是visual studio 2010简称vs2010。它包含开发必需的编辑器和编译器,以及可供实时查阅的帮助文档。编辑器用来编写C++代码;编译器可以把我们的代码生成目标文件,然后调用链接器把所有的目标文件和库文件组装成可以执行的文件。vs2010可以在Windows XP、Windows 7或者更高版本的系统中运行,不区分32位(bit)还是64位系统。如果您的系统是win8或者win10,就需要用vs更高的版本,如:vs2013,或者更新的软件。比如我在我的另一台win8企业版64bit系统中,安装了vs2013而且可以完美运行 。
1.2.2 vs2010下载与安装
vs2010的下载地址在下方给出 ,该地址是微软官方提供的试用版软件,后缀.iso表明它是一个镜像文件。用7-Zip 将该镜像中包含的文件全部提取出来,双击setup.exe开始安装。
单击"安装Microsoft Visual Studio 2010";等待安装组件加载完毕后,单击“下一步”按钮。
选中"我已阅读并接受许可条款(A)",表示接受软件许可,继续点击"下一步"按钮;选中"选择要安装的功能(S)"下方的"完全(F)"选项,表示完整安装。"产品安装路径(R)"下方的路径保持默认,单击"安装"按钮,开始正式安装。
如果软件安装成功,窗口左上角会有"成功"字样。单击右下角"安装文档"按钮,安装帮助文档。
帮助文档路径在上面左图中"库位置"下方文本框中的路径,可以保持默认,也可以重新选择一个目录。这里把帮助文档放在了C盘下面的HelpLibrary文件夹下,在"库位置"下方文本框中输入C:\HelpLibrary\,注意C后面是英文冒号。如果路径不存在,安装程序会自动创建。点击"确定"按钮;确保至少添加"Visual C++ - 中文",然后单击“更新”按钮,开始安装帮助文档。
经过帮助文档的复制、索引合并后,窗口显示"更新完毕"字样,表示帮助文档安装成功。点击右上角的设置,选择"使用本地帮助(L) ",可以在没有网络的情况下使用刚才安装的帮助文档(图略)。至此,visual studio 2010及其离线帮助文档安装结束。
1.2.3 Windows平台其他免费开发工具
- 略
- Eclipse :需要根据电脑当前系统是32bit还是64bit下载相应位数的eclipse,同时还需要32bit或者64bit的jre (Java Runtime Environment,Java运行环境)的支持。
- gcc :分为32bit和64bit,对源码使用g++命令,可生成可执行程序。
上述免费软件,针对不同平台(如:Window、Mac和Linux)都有相应软件,而且是开源的。
1.2.4 使用visual studio 2010- 打开visual studio 2010。
-
执行菜单命令:文件(F) 新建(N) 项目§。在弹出的对话框中,依次选择“Visual C++” “win32控制台应用程序”,修改项目的名称为“HelloWorldProj”。因为需要在控制台上输出"Hello World!"字符串,所以这里将项目名称修改为HelloWorldProj,以便于通过名称猜测项目内容。
-
在弹出的"win32应用程序向导"对话框中,单击"下一步"。
-
确保选中的应用程序类型为"控制台应用程序",附加选项下方勾选"空项目"。点击"完成"按钮。至此,名为HelloWorldProj的空项目创建完成。
-
在"解决方案资源管理器"窗口可以看到刚才创建的空项目。窗口中高亮部分,就是在步骤2中候输入的项目名称。如果找不到“解决方案资源管理器”窗口,尝试执行菜单命令:窗口(W) 重置窗口布局®。接下来,为空项目添加.cpp文件。右键单击项目名,依次执行:添加(D) 新建项(W)…。
-
在弹出的"添加新项"对话框中,选择"C++文件(.cpp)" ,填写文件名称为HelloWorld.cpp。并单击“添加”按钮。
-
在"解决方案资源管理器"中双击HelloWorld.cpp文件将其打开,然后在右侧窗口中输入前面讲解的C++代码(注意:右侧窗口上方用矩形线框框起来的是当前正在被编辑的文件名,它的名字和左侧线框中的名字相同,也就是刚才打开的文件)。C++对大小写敏感,所以需要注意代码中字母的大小写。如果出现错误,vs2010会用红色波浪线标识。下图中,cout和<<之间的空格,以及<<和字符串"Hello World! "之间的空格,都是为了便于阅读,可有可无。
你也完全可以把代码中4~8行写在一行,并删除一些不必要的空格:
using namespace std;int main(){cout<<“Hello World!”;return 0;}
这样写与分开写没有实质上的差别,它不会减少目标文件的大小,反而对代码阅读带来不便。需要注意的是,#开头的预处理器指令需要独占一行,因为它们不是语句。如:#include。
8. 执行菜单命令:生成(B) 生成解决方案(B);或者按下快捷键"Ctrl + Shift + B"。
9. 执行菜单命令:调试(D) 开始执行(不调试)(H);或者按下快捷键"Ctrl + F5"。如果输入没有错误,可以看到程序运行的结果 。
-
如果把cout << “Hello World!”;改为cout << “Hello World!\n”;或者cout << “Hello World!” << endl;,输出中的"请按任意键继续… "提示语就会在新的一行显示。\n表示换行。endl(end line)表示该行结束,除了可以换行输出外,还可以刷新输出字符串缓存 。
- 定位错误。默认情况下,vs2010的错误提示窗口是不显示的。可以通过执行菜单命令:试图(V) 错误列表(L) 将其打开,窗口在vs2010底部显示。初学者最常见的错误是遗漏语句末尾的分号(;)或者把英文分号写成了中文分号(;)。尝试在vs2010中分别加入这两种错误。
第一种情况,删除cout语句末尾的分号。vs2010将错误定位在第8行,说是return的前面缺少分号。这不是它定位不准确,而是因为在写代码时,一个语句可以分散在多行。如右图所示。这也告诉我们,在以后的排错时,需要在错误提示的所在行及其前后行查找。为了让程序便于阅读,把分散在多行的cout语句放在一行,并在第7行末尾加上分号。这个时候,错误提示信息也就自动消失。
- 定位错误。默认情况下,vs2010的错误提示窗口是不显示的。可以通过执行菜单命令:试图(V) 错误列表(L) 将其打开,窗口在vs2010底部显示。初学者最常见的错误是遗漏语句末尾的分号(;)或者把英文分号写成了中文分号(;)。尝试在vs2010中分别加入这两种错误。
第二种情况,错把中文用作英文。把cout语句末尾的英文分号改为中文分号。按下"Ctrl + Shift + B",错误列表中显示很多条与错误相关的信息。逐条阅读,根据第二条错误提示,可以知道是输错了分号。双击提示信息快速定位到错误所在行(第7行),把中文分号改为英文分号,错误提示随即消失。
针对这两条常见的错误的建议是:1)时刻注意该行末尾是否应该有分号,如果应该有,记得写上分号。2)在写代码时,将输入法切换到英文模式。3)多记忆一些英文单词,切记不要使用拼音代替单词。
12. 生成程序的Release(发行)版本。在所有已知错误(常说的bug,它包括语法错误和逻辑错误)已经排除 ,程序运行无误之后,就可以发布程序了。程序的发行可以通过vs2010的Debug/Release切换开关来实现。它在菜单"数据(A)"的下方,绿色三角形的右方,以下拉菜单的形式呈现。默认是Debug模式。通过单击下拉菜单,选中Release,可以切换到Release模式。
依次按下"Ctrl + Shift + B"和"Ctrl + F5"快捷键,就可以生成HelloWorld的Release版本了。该程序在项目文件夹中的Release文件夹下。右键单击’解决方案"HelloWorldProj"’,在弹出的对话框中选择"在Windows资源管理器中打开文件夹(X) ",该目录下的Release文件夹包含刚才发布生成的.exe文件,文件名为HelloWorldProj.exe,文件名和项目名称相同。如果要在其他装有windows系统的电脑上运行该exe文件,只需要将Release文件夹下的所有文件连同Release文件夹一同复制到那个电脑上即可。
- 尝试运行Release文件夹下的HelloWorldProj.exe文件。单击Windows系统的开始菜单,选择"运行® “,在"运行对话框” 里输入"cmd",然后按下回车键或者单击确定按钮。这样就打开了一个cmd窗口(命令窗口,cmd是command的缩写),vs2010通常把cmd窗口作为控制台。
然后,把Release目录下的HelloWorldProject.exe文件拖到cmd窗口中,按下回车键,就可以看到程序的输出了。
注意:双击exe程序也可以执行exe文件,但是由于程序中只有一条输出语句,紧接着输出语句是return 0;,程序会在输出Hello World!之后立即返回。主函数返回,意味着程序结束,因此,如果是双击该exe文件,只能看到一闪而过的黑框。如果在代码中加入cin.get();语句,就可以阻止程序自动退出。cin是控制台输入(console input),get是cin的一个成员函数,用来获取用户输入。main函数部分修改如下:
1 /* 修改后的main函数
2 函数中加入了cin.get(); /
3 int main(){
4 cout << “Hello World!”<< endl;
5 cin.get(); // 这句可以阻止程序自动退出
6 return 0;
7 }
代码1~2行介绍了另一种注释方式——段注释。段注释的内容在两个星号之间,如:/ 注释内容 */。段注释的内容可以跨越多行,但是需要成对使用/和/,并保证它们的前后关系。
打开Release开关,按下"Ctrl + Shift + B"生成解决方案,按下"Ctrl + F5"运行程序。如果结果正确,在Release目录下会生成HelloWorldProj.exe文件。双击该文件,会输出字符串"Hello World!",当程序执行到cin.get();语句时,会等待用户的输入。只有当用户按下任意键并且按下回车键后(例如:按下空格键,然后按下回车键),程序才会退出。
14. 清理项目生成的文件:执行菜单命令:生成(B) 清理HelloWorldProj(N),可以清空Release文件夹下所有文件。单击Debug/ Release切换开关,将IDE切换回Debug模式。
15. 打开最近的项目。菜单命令:文件(F) 最近使用的项目和解决方案(J),可以找到最近创建的项目。最近的项目名以.sln结尾。所以,如果拿到一个项目文件,先找到项目文件夹下的.sln文件,双击,vs2010就会自动加载整个项目的文件,并在"解决方案资源管理器"中显示项目包含的所有文件 。
1.3 使用帮助文档
-
“选择本地帮助"或者"选择在线帮助”。通过执行菜单命令:帮助(H) 管理帮助设置(S)。在弹出的"Help Library管理器"对话框中,单击右上角的设置(S)。将设置修改为"我要使用本地帮助",单击“确定”按钮。这样就可以在没有网络的情况下使用本地的帮助文档。
-
选中需要了解的内容。比如,对前面介绍的cout还不是太了解,可以将cout全选(在cout上双击,可以全选整个关键字cout)。
-
按下F1键。与cout有关的帮助会在浏览器中显示。
当网络可用时,记得在"Help Library管理器"中,单击"联机检查更新(U)",让本地帮助文档处于最新状态。执行菜单命令:帮助(H) 检查更新(K),可以让vs2010保持最新状态。
1.4 快捷键
记住一些快捷键可以加快开发进度: -
Ctrl + Shift + N:新建项目
-
Ctrl + Shift + A:添加新项
-
Ctrl + Shift + B:生成解决方案
-
Ctrl + F5:运行。如果在运行时发生错误,可以按下F5键调试,IDE会在错误的地方停止运行,并给出提示信息。
其他快捷键 :
选中若干行代码,依次按下Ctrl + K,Ctrl + C,可以注释选中部分代码。Ctrl + K,Ctrl + U可以对当前选中部分取消注释。
依次按下Ctrl + A,Ctrl + K,Ctrl + F,可以选中所有代码,并将其格式化,便于阅读。
Ctrl + J,用于代码快速补全 。在输入完cou时,然后按下Ctrl + J快捷键,提示框会显示很多候选的命令。按下键盘上下键,选中需要使用的命令。按下Tab键即可自动补全。Ctrl + F用于查找,Ctrl + H用于替换,Ctrl + S用于保存文件。随时使用Ctrl + S命令可以减轻因机器掉电(停电或者插头松动导致断电)带来的损失。但是如果您正在使用的机器装有还原卡,在U盘上新建项目并及时保存可能会是唯一的方法。
以上快捷键可以在菜单项中找到,不需要特别记忆。在以后的使用中,多加留意,慢慢的就会记住。
本人保留所有著作权。未经许可不得转载。