2.2 如何创建一个程序
进入Visual Studio 2012 Express版之后,可以看到整个开发环境的界面,如图2.2所示。
在菜单栏上有11个下拉式菜单(其中“项目“菜单和“生成”菜单要在打开项目之后才会出现),分别如下。
(1)文件菜单:实现新建、打开、保存项目或源代码以及退出等功能。
(2)编辑菜单:实现撤销、重做、查找、替换等常用功能。
(3)查看菜单:实现显示区域的选择功能。
(4)项目菜单:实现项目相关的设置、添加资源文件等功能。
(5)生成菜单:实现程序的编译、生成等功能。
(6)调试菜单:实现程序的运行、调试等功能。
(7)团队菜单:连接到团队服务器实现协同开发。
(8)工具菜单:提供管理、调试、数据库连接等辅助工具。
(9)测试菜单:提供程序的测试设置和自动测试等功能。
(10)窗口菜单:实现窗口管理功能。
(11)帮助菜单:提供帮助信息。
在新建程序之前,需要先介绍一下项目③(Project)的概念。类似于造房子需要图纸、建筑材料和建筑工具一样,设计程序也需要各种各样的东西,如程序代码、头文件或一些额外的资源,这些东西都是放在一个项目里的。项目能够协调组织好这些文件和资源,使得设计更为有序,查找更为方便。如果不创建项目,那么将会失去很多管理功能,多文件的程序会编译失败,并且有可能找不到对应文件。
小提示
每一个项目只能对应一个程序。如果编写好一个程序之后,想再另外编写一个程序,应该新建另一个项目,否则两个程序都可能会无法编译运行。
此外,在Visual Studio 2003以后的版本中,都有了解决方案这个概念。它是一组多个项目的集合,可以认为是一个“更大的项目”。对于初学者而言,可以暂时不使用该功能。
那么,如何新建一个程序呢?首先单击“文件”菜单,选择“新建项目”,可以看到“新建项目”的对话框,如图2.3所示。
在左侧的模板中,选择Visual C++;在右侧的项目类型中,选择“Win32控制台应用程序”。在下方填写名称并取消“为解决方案创建目录”前面的勾,选定该项目的保存位置,然后单击“确定”按钮。
接下来会出现Win32应用程序向导,其中需要设置的是应用程序类型和附加选项,如图2.4所示。
图2.4 Win32应用程序向导
此时新项目已经建立好,可以发现Visual Studio的界面和启动时发生了一些变化,如图2.5所示。
在右侧的解决方案资源管理器中可以看到4个像文件夹形状的图标,分别是外部依赖项、源文件、头文件和资源文件。外部依赖项和头文件的概念将在本书第11章中再作详细介绍。源文件主要用于存放程序的代码,这些文件的扩展名为cpp;头文件主要用于存放一些预先定义好的程序内容,扩展名为h;资源文件一般是存放运行该程序所必需的资源,例如图像、文本等类型的文件。要注意,这里的“文件夹结构”并不是磁盘上的文件夹结构,而只是这些文件在该项目中的分类。所以,如果你没有自行创建过这些文件夹,那么在磁盘上是无法找到它们的。
接下来需要向空的项目中添加代码文件。在右上侧的“解决方案资源管理器”中,右击“源文件”,选择添加,单击“新建项”,会出现添加新项的对话框,如图2.6和图2.7所示。
图2.6 解决方案资源管理器
图2.7 添加新项
在右侧的文件类型中,选择“C++文件(.cpp)”,并填写文件名main.cpp。单击“添加”之后,就能发现在解决方案资源管理器中多了一个文件,并且该文件已经打开,供用户输入程序代码。在右侧文本框内输入以下代码。
程序2.1 自己编写的Hello,World
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello World!"; //输出Hello World
return 0;
}
小提示
程序2.1中的大括号{}不能遗漏,否则将无法通过编译。无论何时,程序中的大括号应该是能够配对的。
接下来要介绍如何让设计好的程序运行起来。单击“生成”菜单,再单击“编译”(或使用快捷键Ctrl+F7)。所谓编译,就是用编译器软件将我们比较容易掌握的高级语言翻译成计算机可以识别的低级语言。如果没有经过编译(或解释),高级语言的程序代码是无法被执行的。
编译的结果可以在“输出”窗口中看到,输出窗口默认位置为屏幕下方,如图2.8所示。如果编译正确,那么就会显示“成功1个,失败0个”,表示没有任何错误或警告。如果编译错误,则会提示在哪一行的什么位置可能发生了什么错误,相关内容会在本书第11章介绍。
图2.8 编译结果
完成编译后,还要再单击“生成”菜单,单击“生成解决方案”(或使用快捷键F7)。在这个过程中,会将多个源文件的程序模块都“拼装”起来。当一个程序规模比较大的时候,必须要生成解决方案后才能正常运行。生成解决方案的结果也能够在“输出”窗口中看到。
最后单击“调试”菜单里的“开始执行(不调试)”,就能运行程序并查看结果了,如图2.9所示。
图2.9 程序运行结果
小提示
1.在编写某些程序的时候会发现程序能正常编译,但是只有第一次连接是正常的。以后的几次连接均报告“error LNK1104: 无法打开文件……”。这可能是程序运行之后没有关闭造成的。请把所有正在运行的项目名.exe程序关闭,然后再尝试重新编译和连接。
2.如果在“调试”菜单里单击了“启动调试”,程序的运行会一闪而过。这是因为该选项是专门用于调试的,如果没有设置调试的断点,则程序会在完成运行后直接关闭。为了便于观察程序的运行结果,可以选择“开始执行(不调试)”选项,或使用快捷键Ctrl+F5。
在使用熟练之后,会发现当单击“调试”菜单里的“启动调试”或“开始执行(不调试)”时,如果程序代码被修改过需要重新编译生成,则Visual Studio会自动提醒用户是否要重新生成,如图2.10所示。
图2.10 自动提示重新生成
学会如何编译、生成和运行程序之后,我们来分析一下程序2.2中每个语句的含义。
#include <iostream>
包含输入输出流头文件,使得程序具有输入输出功能。通常把这种包含操作称为“预处理头文件”。
using namespace std;
使用命名空间,暂时认为是一种定式(该内容将在第11章中介绍)。
int main()
主函数,是每个程序开始运行的起点,每个程序只能有并且必须有一个主函数。在没有系统地介绍函数之前,也只能认为这是一种定式。
cout <<"Hello World!"; //输出Hello World
这个cout(念C-Out)实现了在屏幕上输出内容的功能。“<<”称为插入操作符,用于输出内容。在Hello World!两端加上双引号表示它是一个字符串,是一个整体。
而在代码中键入“//”后的字符都会变成绿色,而且无论这些字符是什么,对程序的运行结果都不会产生影响。这些绿色的字符叫做注释(Annotation),程序员用它来记录程序的相关文字信息,或记载某一段程序的含义,方便自己回忆或其他人理解编程思路。
小提示
1.并不是说注释越多越好。在那些很简单的、显而易见的语句后加上注释便显得画蛇添足了。尽管注释允许占用多行,还是应点到为止,从简为宜。
2.在Visual Studio中,注释的颜色默认为绿色。但是,该颜色通常可以在集成开发环境中进行设置,也可能因不同的集成开发环境而发生变化。
写注释是一种好习惯,能够及时把自己当时的思路记录下来。“//”称为单行注释符,当注释要占用多行时,可以用“/”表示注释的开始,用“/”表示注释的结束。
return 0;
主函数的返回值,表示程序运行的结束。暂时也认为是一种定式。
试试看
1.如果去掉第一行的#include ,该程序能否正常运行?
2.如果去掉字符串两端的双引号,是否还能输出这些字符?
3.如果去掉cout语句后的分号,编译时会出现什么错误提示?
4.试试cout <<"3+4=" <<3+4;会是什么结果。
通过这个程序可以总结出一个简单的C++程序代码结构。
预处理头文件
使用命名空间
主函数
{
语句1;//注释……
……
/*
注释……
*/
语句n;
}
小提示
1.在某些计算机中安装了操作系统的更新之后,会导致Visual Studio 2012无法打开C++的项目。目前已经证实这是微软.NET Framework更新程序的一个潜在缺陷,可以通过安装Visual Studio 2012 更新(KB2781514)解决这个问题。
参考地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=36020
2.如果将Visual Studio 2012生成的可执行文件直接复制到某些Windows系统的计算机中,运行时会提示“无法启动该程序,因为计算机中丢失MSVCP110D.dll(或MSVCP110.dll)。尝试重新安装该程序以解决此问题。”这是因为在这些操作系统中没有安装Visual Studio对应版本的Visual C++运行时组件。通过修改项目属性,能够使生成的程序可以在大多数Windows系统中运行。单击“项目”菜单,单击“项目名 属性”,会弹出“项目属性页”的对话框。单击左侧框中“配置属性”下“C/C++”前的加号,再单击“代码生成”。根据配置的实际情况(Debug或者Release)将右侧的“运行时库”选项改为“多线程调试”(针对Debug)或“多线程”(针对Release)即可,如图2.11所示。此外,也可以为这些计算机安装Visual Studio 2012的Visual C++运行库(Redistributable Package)。
![image](
图2.11 更改运行时库