Visual C++ 6.0编程环境的使用
1.1 编制并运行程序的四部曲
(1)编辑(把程序代码输入,交给计算机)。
(2)编译(成目标程序文件.obj)。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
(3)链接(成可执行程序文件.exe)。链接是将编译产生的.obj文件和系统库连接装配成一个可以执行的程序。由于在实际操作中可以直接点击Build从源程序产生可执行程序,可能有人就会置疑:为何要将源程序翻译成可执行文件的过程分为编译和链接两个独立的步骤,不是多此一举吗?之所以这样做,主要是因为:在一个较大的复杂项目中,有很多人共同完成一个项目(每个人可能承担其中一部分模块),其中有的模块可能是用汇编语言写的,有的模块可能是用VC写的,有的模块可能是用VB写的,有的模块可能是购买(不是源程序模块而是目标代码)或已有的标准库模块,因此,各类源程序都需要先各自编译成目标程序文件(2进行机器指令代码),再通过链接程序将这些目标程序文件连接装配成可执行文件。
(4)运行(可执行程序文件)。
1.2 工程以及工程工作区
在开始编程之前,必须先了解工程Project(也称“项目”,或称“工程项目”)的概念。工程又称为项目,它具有两种含义,一种是指最终生成的应用程序,另一种则是为了创建这个应用程序所需的全部文件的集合,包括各种源程序、资源文件和文档等等。绝大多数较新的开发工具都利用工程来对软件开发过程进行管理。
用VC6编写并处理的任何程序都与工程有关(都要创建一个与其相关的工程),而每一个工程又总与一个工程工作区相关联。工作区是对工程概念的扩展。一个工程的目标是生成一个应用程序,但很多大型软件往往需要同时开发数个应用程序,VC开发环境允许用户在一个工作区内添加数个工程,其中有一个是活动的(缺省的),每个工程都可以独立进行编译、连接和调试。
实际上,VC6是通过工程工作区来组织工程及其各相关元素的,就好像是一个工作间(对应于一个独立的文件夹,或称子目录),以后程序所牵扯到的所有的文件、资源等元素都将放入到这一工作间中,从而使得各个工程之间互不干扰,使编程工作更有条理,更具模块化。最简单情况下,一个工作区中用来存放一个工程,代表着某一个要进行处理的程序(我们先学习这种用法)。但如果需要,一个工作区中也可以用来存放多个工程,其中可以包含该工程的子工程或者与其有依赖关系的其他工程。
可看出,工程工作区就像是一个“容器”,由它来“盛放”相关工程的所有有关信息,当创建新工程时,同时要创建这样一个工程工作区,而后则通过该工作区窗口来观察与存取此工程的各种元素及其有关信息。创建工程工作区之后,系统将创建出一个相应的工作区文件(.dsw),用来存放与该工作区相关的信息;另外还将创建出的其他几个相关文件是:工程文件(.dsp)以及选择信息文件(.opt)等。
编制并处理C++程序时要创建工程,VC6已经预先为用户准备好了近20种不同的工程类型以供选择,选定不同的类型意味着让VC6系统帮着提前做某些不同的准备以及初始化工作(例如,事先为用户自动生成一个所谓的底层程序框架或称框架程序,并进行某些隐含设置,如隐含位置、预定义常量、输出结果类型等)。工程类型中,其中有一个为“Win32 Console Application”,它是我们首先要掌握的、用来编制运行C++程序方法中最简单的一种。此种类型的程序运行时,将出现并使用一个类似于DOS的窗口,并提供对字符模式的各种处理与支持。实际上,提供的只是具有严格的采用光标而不是鼠标移动的界面。此种类型的工程小巧而简单,但已足以解决并支持本课程中涉及到的所有编程内容与技术,使我们把重点放在程序的编制而并非界面处理等方面,至于VC6支持的其他工程类型(其中有许多还将涉及到Windows或其他的编程技术与知识),有待在今后的不断学习中来逐渐了解、掌握与使用。
1.3 启动并进入VC6的集成开发环境
通过“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”,单击一下该菜单项
窗口从大体上可分为四部分。上部:菜单和工具条;中左:工作区(workspace)视图显示窗口,这里将显示处理过程中与项目相关的各种文件种类等信息;中右:文档内容区,是显示和编辑程序文件的操作区;下部:输出(Output)窗口区,程序调试过程中,进行编译、链接、运行时输出的相关信息将在此处显示。
注意,由于系统的初始设置或者环境的某些不同,可能你所启动的VC6初始窗口式样与图1-1有所不同,也许会没出现Workspace窗口或Output窗口,这时可通过“View→Workspace”菜单选项的执行,总可使中左处的工作区窗口显现出来;而通过“View→Output”菜单选项的执行,又总可使下部的输出区窗口得以显现。当然,如果不想看到这两个窗口,可以点击相应窗口的“x”按键来关闭窗口。
1.4 创建工程并输入源程序代码
为了把程序代码输入而交给计算机,需要使用VC6的编辑器来完成。如前所述,首先要创建工程以及工程工作区,而后才能输入具体程序完成所谓的“编辑”工作。
选择菜单File下的New项,会出现一个选择界面,在属性页中选择Projects标签后,会看到近20种的工程类型,我们只需选择其中最简单的一种:“Win32Console Application”,而后往右上处的“Location”文本框和“Project name”文本框中填入工程相关信息所存放的磁盘位置(目录或文件夹位置)以及工程的名字,设置到此时的界面信息如图1-3所示。
在图1-3中,“Location”文本框中填入如“D:\myData\VC6”,这是假设你准备在D磁盘的\myData\VC6文件夹即子目录下存放与工程工作区相关的所有文件及其相关信息,当然也可通过点击其右部的“…”按钮去选择并指定这一文件夹即子目录位置。“Project name”文本框中填入如“Sample”的工程名(注意,名字由你根据工程性质确定,此时VC6会自动在其下的Location文本框中用该工程名“Sample”为你建立一个同名子目录,随后的工程文件以及其他相关文件都将存放在这个目录下)。
选择OK按钮进入下一个选择界面。这个界面主要是询问用户想要构成一个什么类型的工程,其界面如图1-4所示。
若选择“An empty project”项将生成一个空的工程,工程内不包括任何东西。若选择“A simple application”项将生成包含一个空的main函数和一个空的头文件的工程。选“A"Hello World!"application”项与选“A simple application”项没有什么本质的区别,只是需要包含有显示出“Hello World!”字符串的输出语句。选择“An application that supports MFC”项的话,可以利用VC6所提供的类库来进行编程。
为了更清楚的看到编程的各个环节,我们选择“An empty project”项,从一个空的工程来开始我们的工作。单击Finish按钮,这时VC6会为你生成一个小型报告,报告的内容是刚才所有选择项的总结,并且询问你是否接受这些设置。如果接受选择OK按钮,否则选择Cancel按钮。我们选OK从而可进入到真正的编程环境下了。界面情况如图1-5所示。
注意屏幕中的Workspace窗口,该窗口中有两个标签,一个是ClassView,一个是FileView。ClassView中列出的是这个工程中所包含的所有类的有关信息,当然我们的程序将不涉及到类,这个标签中现在是空空如也。点击FileView标签后,将看到这个工程所包含的所有文件信息。点击“+”图标打开所有的层次会发现有三个逻辑文件夹:Source Files文件夹中包含了工程中所有的源文件;Header Files文件夹中包含了工程中所有的头文件;Resource Files文件夹中包含了工程中所有的资源文件。所谓资源就是工程中所用到的位图,加速键等信息,在我们的编程中不会牵扯到这一部分内容。现在FileView中也不包含任何东西。
逻辑文件夹是逻辑上的,他们只是在工程的配置文件中定义的,在磁盘上并没有物理地存在这三个文件夹。我们也可以删除自己不使用的逻辑文件夹;或者根据我们项目的需要,创建新的逻辑文件夹,来组织工程文件。这三个逻辑文件夹是VC预先定义的,就编写简单的单一源文件的C程序而言,我们只需要使用Source Files一个文件夹就够了。
下面该轮到生成一个“Hello.cpp”的源程序文件,而后通过编辑界面来输入所需的源程序代码。选择菜单Project中子菜单Add To Project下的new项,在出现的对话框的Files标签(选项卡)中,选择“C++ Source File”项,在右中处的File文本框中为将要生成的文件取一个名字,我们取名为Hello(其他遵照系统隐含设置,此时系统将使用Hello.cpp的文件来保存所键入的源程序),此时的界面情况如图1-6所示。
而后选择OK按钮,进入输入源程序的编辑窗口(注意所出现的呈现“闪烁”状态的输入位置光标),此时只需通过键盘输入你所需要的源程序代码
可通过Workspace窗口中的FileView标签,看到Source Files文件夹下文件Hello.cpp已经被加了进去,此时的界面情况如图1-7所示。
实际上,这时在Workspace窗口的ClassView标签中的Globals文件夹下,也可以看到我们刚才所键入的main函数。
不需要象前面描述的那样显示地创新一个工程,对于新编写一个程序,只需要在图1-3所示的界面中,选“Files”标签,再选择“C++ Source File”,其界面与图1-6相似(仅Add to projec是暗淡的、无法选择),后续操作则与前述相同。
最简单的做法是:直接使用工具栏上的新建文件按钮“”新建一空白文件,紧接着单击工具栏上的保存按钮“”保存此空文件——注意,保存时一定要以“.c”或“.cpp”作为扩展名,否则逻辑程序时自动格式化和特殊显示等很多特性将无法使用,程序无法被运行。
这种方式新建的C源程序文件在编译时,会提示用户,要求允许系统为其创新一个默认的工程(含相应的工作区)。
程序编制完成(即所谓“四步曲”中第一步的编辑工作得以完成)之后,就可以进行后三步的编译、链接与运行了。所有后三步的命令项都处在菜单Build之中。注意,在对程序进行编译、链接和运行前,最好先保存自己的工程(使用“File→Save All”菜单项)以避免程序运行时系统发生意外而使自己之前的工作付之东流,应让这种做法成为自己的习惯、素质。
首先选择执行菜单第一项Compile,此时将对程序进行编译。若编译中发现错误(error)或警告(warning),将在Output窗口中显示出它们所在的行以及具体的出错或警告信息,可以通过这些信息的提示来纠正程序中的错误或警告(注意,错误是必须纠正的,否则无法进行下一步的链接;而警告则不然,它并不影响进行下一步,当然最好还是能把所有的警告也“消灭”掉)。当没有错误与警告出现时,Output窗口所显示的最后一行应该是:“Hello.obj-0 error(s), 0warning(s)”。
编译通过后,可以选择菜单的第二项Build来进行链接生成可执行程序。在链接中出现的错误也将显示到Output窗口中。链接成功后,Output窗口所显示的最后一行应该是:“Sample.exe-0 error(s), 0 warning(s)”。最后就可以运行(执行)我们所编制的程序了,选择Execute项(该选项前有一个深色的感叹号标志“!”,实际上也可通过单击窗口上部工具栏中的深色感叹号标志“!”来启动执行该选项),VC6将运行已经编好的程序,执行后将出现一个结果界面(所谓的类似于DOS窗口的界面),如图1-8所示,其中的“press any key to continue”是由系统产生的,使得用户可以浏览输出结果,直到按下了任一个键盘按键时为止(那时又将返回到集成界面的编辑窗口处)。
至此我们已经生成并运行(执行)了一个完整的程序,完成了一个“回合”的编程任务。此时应执行“File→Close Workspace”菜单项,待系统询问是否关闭所有的相关窗口时,回答“是”,则结束了一个程序从输入到执行的全过程,回到了刚刚启动VC6的那一个初始画面。
(1)完全备份。对于刚才工作的工程Sample而言,只需将D:\myData\VC6下的文件夹Sample复制到U盘或打包成一个文件后放到自己的邮箱。需要在其它计算机上继续完成该工程时,将该文件夹复制到该计算机的硬盘上,进入VC6,通过“File→Open Workspace”菜单项将该工程打开即可。
(2)只备份C源程序文件。对于刚才工作的工程Sample而言,工程非常简单,没有什么专门的设置,因此,仅备份其中的C源程序Hello.cpp就足矣。需要在其它计算机上继续完成该程序时,只需将备份的程序复制到该计算机的硬盘上,进入VC6,根据前面的讲述,新建一Win32 Console Application(做到图1-5所示的界面),然后通过“Project→Add to Project→Files”菜单项将Hello.cpp添加新建的工程中。
最简单的做法是:直接使用工具栏上的文件打开按钮“”打开Hello.cpp。
1.5 将自己设计的产品提供给其他人使用
需要将自己设计的产品提供给他人使用时,针对前述的Sample工程,只需将链接产生的可执行文件Sample.exe复制/发送给他人即可,不能复制整个工程文件夹或复制.cpp文件,这是因为:
(1)复制可执行文件已足够。
(2)复制整个工程文件夹或复制.cpp文件,等于提供了自己的详细设计,在商业上一般是不这样做了,除非事先双方谈妥需要这样做或对方愿意出高价购买你的详细设计。
另外,应当说明的是:前面所说的编译、链接过程都是Debug类型的,也就是说,当VC6在进行这些工作时将加入一些调试信息,致使编译链接后生成的代码很庞大,效率也降低。如果确信你的程序已经完美无缺或者是要正式发布,就应该选择菜单Build中的Batch Build项,产生如图1-9所示的对话框,其中的两个选项分别代表编译的代码形式。如果选择第一项Release,那么生成的就是最终代码,其运行效率会增高。
选择Sample-Win32 Release项,再进行Build或Rebuild All就会在工程所在的目录下产生一个新的目录release,在release目录下生成的可执行程序代码规模小,执行效率高,是我们最后的产品。