1、写在前面在我还在上学的时候,我选择了 C+,最初我用 VC6 作为我的 IDE,我看过很多本 C+的教材,有的适合我,有的不适合我,其中有一本叫Visual C+ 2005 入门经典的书帮了我不少的忙。因为通常的 C+教材都只会介绍 C+的语法什么的,很少会告诉我们如何去编译、运行,告诉我们什么是控制台程序,什么事 Win 程序,什么是 GUI 程序,C+能干什么,VC 和 C+的区别是什么。现在有很多的朋友应该也有这些问题吧?学 C+用 C+也有几年了,算不上熟悉,算是初窥门径吧,我想我应该做点什么帮助一下那些和曾经的我一样困惑的朋友,特别是学生朋友,告诉他们他们所困惑的问题的答案。记得我学
2、 C+的时候,没有人教,有的时候也走了不少弯路,甚至连调试也不会,也不知道可以通过看调用堆栈看调用次序,还自己慢慢的去搜索,好傻啊。接下来我会做一个Visual C+ 2010 入门教程系列,用来帮助初学者。刚开始学的时候是很痛苦的,这个我深有体会,特别是身边还没有人能够指导一二的。内容主要涵盖在 Windows下面使用 C+进行开发的常见内容,Visual Studio 2010 的使用,如何创建新项目,如何调试,如果配置项目属性等等,另外还会介绍 Visual C+ 2010 中新加如的一些内容,包括一些新的 STL组建,一些新的语法支持等等。由于本人水平有限,其中难免有错误,希望大家谅解
3、,如果大家有发现问题还请务必及时指出来,否则误导了他人我就罪不容恕了。注意,本教程非 C+教程,不会教你 C+,只会教你如何使用 Visual C+ 2010 去练习去学习其它 C+教材上面的程序。因此建议大家认真的去看其他的 C+教程,在使用 Visual C+ 2010 实践的时候如果遇到问题可以到这里来参考。推荐C+ Primer、C+程序设计语言Visual C+ 2008 入门经典。第一章: 关于 Visual Studio、VC 和 C+的那些事首先,这三个东西有什么区别呢?VC 和 C+是相同的吗,有什么区别呢?我刚开始学 C+的时候也有这样的问题,在这里我来替大家解释一下他们到
4、底是什么。Visual Studio,我们一般都简称为 VS,VC 全称是 Visual C+,C+就不用解释了吧?Visual Studio 其实是微软开发的一套工具集,它由各种各样的工具组成,这就好像 Office 2007是由 Word 2007、Excel 2007、Access 2007 等等组成的一个道理。其中 Visual C+就是 Visual Studio 的一个重要的组成部分。Visual Studio 可以用于生成 Web 应用程序,也可以生成桌面应用程序,在 Visual Studio 下面,除了 VC,还有 Visual C#,Visual Basic,过去还有 Vi
5、sual J#,现在还有 Visual F#等等组件工具,使用这些工具你可以使用 C+语言、C#语言或者 Basic 语言(微软改进版)进行开发。这就好比桌上放着刀、叉、筷子,你可以用它们来吃饭,无论你用什么工具都可以,因为它们都是餐具的一种。VC,全称是 Visual C+,它只是一个工具而已。C+是一门和 C、Basic、C#、Java 一个概念的东西,它是一门语言,这个概念就同汉语、英语、法语之间的关系一样。语言的可以不同,他们有的复杂有的精简,比如汉语,我个人认为这是这个星球上最复杂的语言;又比如电影阿凡达中外星人使用的语言,不过 100 都个单词而已。当然,语言并没有高低贵贱之分,而
6、对语言掌握的好不好,说的好不好是有高下之别的。一个语言都有哪些要素呢?语法就是其中一个重要的方面,比如你要对你所喜欢的人表达爱慕之情,那么你应该说“我爱你”,你不能说“你爱我”,因为这搞错了主谓宾关系,因此我们通常都需要按照一定的规矩和原则表达才会让别人正确理解我们真正的含义。在我们的汉语中有一些成语,它们通常都比较简单短小,但是却能表达非常强烈的感情,而且效果非常好。比如你想骂一个坏人“你实在是太变态了,这种事情都干得出来。”你可以这样说:“你也太禽兽不如了!”对于编程的语言来说,其实也是有成语的,在我看来,这就是库函数。通常我们在编程的时候都推荐选择库函数,因为它通常会比较快一些。一直以来
7、都有不少人混淆 Visual C+和 Visual Studio,其实最初 Visual C+发布的时候还没有 Visual Studio 这个东西,Visual C+是一个独立的开发工具,与 Visual Basic 等并列,最后微软将它们整合在一起组成了 Visual Studio。Visual C+从发布起到现在已经有 10 个大版本了,我们这里介绍的 Visual C+ 2010 就是Visual C+ 10,简称 VC10。上朔 10 多年,Visual C+ 6.0 发布了,这个被称为史上最经典的VC,现在有很多企业还在用它,大量的教材基于这个版本的 VC 来写的。然而实际上 VC
8、6 并没有想象中的那么美好,孱弱的 IDE,不完善的 STL 等等让它越来越不适应时代的发展,同时由于后来的版本和它的差别越来越大,让很多习惯于 VC6 教材的人在新版本上无所适从。VC6 走向历史的终结点其实是必然的,只在于时间问题罢了,况且大部分人都有追求最新的“嗜好”,所以这里也选择最新版的 VC 来做入门教程。下面来介绍下这个 VC 版本和 VS 版本的对应关系:Visual Studio .net (2002) Visual C+ .net (2002) Visual C+ 7.0 - _MSC_VER 值 1300这个是微软推出.net 战略之后的最早的一个版本的 VC,这个版本相
9、对 VC6 来说变化并不是很大,一些不标准的语法依然得到支持,不过 IDE 界面已经出现了 VS 时代的雏形。Visual Stuido .net 2003 - Visual C+ .net 2003 - Visual C+ 7.1 - _MSC_VER值 1310Visual C+ 2010 入门教程这个版本我觉得只能算是一个对.net 2002 的一个 Patch 版本,解决了一些 Bug,不规范的语法依然得到支持,比如 for 循环变量作用域的问题。Visual Studio 2005 - Visual C+ 2005 - Visual C+ 8.0 - _MSC_VER 1400这个版
10、本算是一个比较符合 C+标准的 VC 版本了,微软为这个版本的 VC 加入了大量的增强版的 C 库函数(CRT 函数),如 strcpy_s 之类,当然,这部分并不是 C 和 C+标准所要求的。Visual Studio 2008 - Visual C+ 2008 - Visual C+ 9.0 - _MSC_VER 1500这个版本应该是在 Vista 发布之后出的,如果你是在 Vista 或者 Win7 下面使用,那么应该选择这个版本。这个版本与 VC2005 变化并不大,不过它的 SP1 为 C+带来一些新的 STL 库组件(tr1部分),以及 MFC 下面的 Ribbon 界面。Vis
11、ual Studio 2010 - Visual C+ 2010 - Visual C+ 10.0 - _MSC_VER 值 1600.这个就是我们即将要介绍的版本,那么让我们来看一下它的启动画面吧。这个是 Visual Studio 2010 中文旗舰版的启动画面。下一章中,我将教大家安装、配置VS2010/VC2010,以及如何使用它来创建第一个 C+程序。如果你没有下载过 Visual Studio 2010 的话,那么请你提前下载好它吧:http:/ 安装、配置和首次使用 VS2010本章将帮助大家安装 Visual C+ 2010,帮助大家做一些常见的配置,以及第一次使用它来写 He
12、lloWord 程序。安装Visual C+ 2010 是属于 Visual Studio 2010 的一部分,这个在前一章中已经讲解过,实际上 Visual C+ 2010 也有更多的子版本,正如 Windows7 有旗舰版、家庭高级版、家庭初级版一样。在上一章的下载地址中有两个版本可以选择,我选择的时候旗舰版,这个功能最全面。如果你下载完毕了,应该有一个 ISO 镜像文件,如果你是从我给的地址下载的,那么那个序列号已经被 替换成正版序列号,直接安装即可。下面是 ISO 文件截图:这就是光盘镜像文件,我们有多种方式可以安装它,你可以把它烧录成光盘,也可以用虚拟光驱软件安装它,由于这个 ISO
13、 已经被修改过了,你甚至可以直接解压它,然后运行里面的 setup.exe 进行安装。这里我使用虚拟光驱进行说明,首先我假设你已经安装好了虚拟光驱软件 DAEMON Tools Lite,如果你还没有安装,请去游侠补丁网下载,因为在那里你总是能找到最新的免费版本。接下来我们通过虚拟光驱加载刚才下载好的 ISO 镜像:在弹出的对话框中选择我们下载好的 ISO 文件。这个时候,虚拟光驱里面已经替我们打开了 ISO 文件,有的机器可能会自动弹出安装提示,有的不会。如果自动弹出安装提示,那么直接通过即可,如果没有弹出,那么用资源管理器方式进入虚拟光驱点击Setup.exe 即可开始安装。由于我已经安装
14、好了 VS2010,所以接下来无法给大家截图了,我就直接用文字描述吧。当弹出 VS2010 安装程序之后点下一步,然后我们可能会看到 完全 最小 自定义 这样的选项,我推荐大家选择自定义,因为只有这样我们才可以自定我们安装的目录。接下来会选择安装的组件。这个时候我们会看到大量的 VS2010 的组件,这里我们可以选择是否安装 Basic 是否安装 C#等等,我在网上找到一些图片,虽然跟中文版 2010 不一样,大家大概的样子是一样的,大家就凑合着看看吧。下面是开始的界面,我们应该选择安装 VS2010.上面这个时候选择同意。然后安装包会开始搜集信息:选择目录: 然后就是开始安装了,注意安装的时
15、候可能需要重启一两次。最后安装成功:配置当安装成功之后,我们就可以开始使用了,这里我先教大家做一些常见的配置,当然大家也可以直接用默认的设置,我这样配置主要是为了方便。下面通过开始菜单来启动 VS2010 吧:如果你是第一次开始,那么可能会让你选择默认的环境设置,我们要使用 VC 当然选择 VC 的配置:出现下面的画面表示已经成功安装和运行了。这是起始页面,以后你会经常见到它。注意,你可能会没有 VAssistX 这个菜单,因为这个是个外部工具,以后会给大家解释它的用处,现在暂时忽略。接下来让我们来做一些常见的设置。通过菜单工具选项调出配置对话框,下面是一些常见的设置:调处行号,选择文本编辑器
16、,所有语言,把行号打成勾。如果你想调整字体或者颜色,那么可以在这里选择:单击工具栏的空白区域,让我们把生成工具栏调出来:这样我们就可以直接在工具栏上面选择编译项目、编译整个解决方案、运行程序和调试程序了。选择生成工具栏旁边的小三角形可以自定,我们还可以添加一些按钮:单击自定义界面下面的添加按钮就可以添加新的按钮了,现在我们把开始执行(不调试)添加工具栏中:以前经常有人问我为什么我的程序闪一下就没了,这就是因为它们把调试( F5,那个实心的三角形)当成了运行(不调试,Ctrl+F5,空心带尾巴的三角形)了。当然是一闪而过啦。关于调试以后说到。 HelloWorld.下面让我们用 VC+ 2010
17、 也就是 VC10 来做一个控制台的 HelloWorld 程序吧。VC2010 里面不能单独编译一个.cpp 或者一个.c 文件,这些文件必须依赖于某一个项目,因此我们必须创建一个项目。有很多种方法都可以创建项目,可以通过菜单:文件,新建,项目;也可以通过工具栏点击新建项目进行创建。这里我们点击起始页面上面的新建项目:点击之后进入新建项目向导:上面选择 Win32 控制台应用程序,名称中输入 HelloWorld 点确定,至于是否为解决方案创建目录我们暂时不管,那主要区别在于解决方案是否和项目文件在同一目录。接下来进入创建页面,在 Win32 应用程序向导的第一个页面直接点下一步即可: 下个
18、页面记得选择空项目,我们不需要预编译头:点击完成。 这时候一个空的项目编译成功了,我们不妨编译一些试试。点击刚才添加的生成工具栏的生成按钮:这时候我们会遇到编译错误,为什么呢?因为我们还没有 Main 函数,对于一个 C+项目来说,一定要有一个且仅有一个 main 函数(Windows 程序需要 WinMain,区别以后再讲),可以是隐式提供也可以是显式提供,至于区别以后会讲到。现在让我们记住这个错误,以后遇到这个错误的时候一定要想想,我们项目中是否有 Main 函数。注意这时候即使你托一个有 Main 函数的文件到 VC10 中进行编译也是没有意义的,因为那个文件并不是我们项目的一部分。现在
19、我们可以添加一个代码文件进来了,这个代码文件可以是已经存在的也可以是新建的,这里新建一个。右键单击项目名称,选择添加,新建项: 在向导中选择代码、C+文件 (.cpp),名称输入 Main,确定。这时候已经成功添加了一个 Main 文件,注意添加新文件的时候要防止重名:然后我们输入最简单的几行代码,然后编译它吧,编译方法和上面一样。如果编译成功你会看到上面的画面,如果失败会有错误提示,那么你可以根据提示去修改项目配置或者代码。然后让我们用 Ctrl+F5 或者点那个空心三角形运行一下吧:OK 了,接下来你可以通过更改这个程序去练习 C+教材上面的程序了。这一章的内容就是这么多了,下一章中我们将
20、讨论以下内容:什么是 C+?什么是编程等等。第三章关于 C+的一些问题 这一回我自己都不知道应该写点什么好,或许今天的篇幅会比往常短很多。我说过,这不是 C+的教程,因为我还没有那个能力来教大家 C+,我能做的,是分享一些学习的经验,以及教新手如何使用 VC2010 这个工具去练习和实践其它 C+教材上面的程序,如C+Primer等。今天说的是我学习和使用 C+这些年来对 C+的一些理解,这样的日志其实是最难写的,因为众口难调,为什么这么说呢?同样的一段音乐不同的人去倾听都会有不同的感受,不同的心境去听也会有不同的感觉。记得当年我在听雅尼的If I could tell you听到的是无尽的伤
21、感和无奈,而我的朋友却怎么也听不出来,呵,你去听听之后会有什么感觉?好,回归正题吧。什么是编程下面这段话我是从百度百科“编程”词条复制过来的,不敢掠人之美:编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。这段话说的比较明白,我们如果想让计算机按照我们想要的方式工作,那么我们必须给它命令,有的常见的任务已经由操作系统帮助我们提供了,操作系统将一些简
22、单的指令封装成一个简单的操作,使得我们的操作更容易更简单,然而操作系统提供的操作始终是有限的,如果要扩展计算机的软件系统,就需要编程了。什么是编程语言如上所说,编程语言就是人类与计算机交流的桥梁。首先编程语言必须是计算机可以理解的或者是可以间接转换成计算机可以理解的指令的东西。打个比方,如果你在一台普通电脑面前站着,大叫道:“电脑,给哥把 C 盘根目录下面的 A 文件拷贝到 D 盘根目录下面去”。我猜想你就算叫上一天也没用,因为普通的电脑无法识别你的指令,这就算是对“机”弹琴吧。什么是编译器如上所说,编程语言是计算机可以直接理解的如机器码或者可以间接转换成计算机可以理解的指令的东西。那么 C+
23、就属于后者,那么是什么把 C+翻译成计算机可以识别的指令的呢?这就是编译器。什么是 C+我不想说 C+的历史了,我想说,它是一门编程语言,它可以通过编译器的翻译成为计算机可以识别的指令。比如我们常见的 C+代码:int a = 3 + 1;cout a endl;这翻译成机器码或者计算机可以理解的指令大概可以是这样的:现在请为我准备一个变量 a,请用 3+1 的和去初始化它,然后请加它的值输出到控制台上并追加上一个空格。关于 C+的更多东西,建议大家去看专门的 C+教材或者维基百科、百度百科等相关词条。学 C+学的是什么? 学 C+学的是什么?可以说 C+是很复杂的,因为要实现一些在其它语言中
24、很简单的任务,在 C+中通常都需要更多的代码和时间,以创建一个窗口为例,其它语言由于有内置的支持,甚至当我们创建一个 HelloWorld 程序时候就已经创建了一个窗口。而在纯粹的 C+环境中,这是做不到的,因为 C+并没有提供 GUI 的内置支持,如果要用 C+创建窗口,我们需要使用到系统 API 或者使用封装了这些 API 的一些库,前者如 Win32 程序设计后者如 MFC、wxWidgets。但是这些并不能代表 C+不好,反而 C+是很强大的,我们学习 C+学得不仅仅是C+的语法,因为仅仅懂得 C+的一些语法又能怎么样呢?演示算法么?其实我认为学习C+的初期当然是熟悉 C+的语法,中期
25、当然是学习 STL 等库、系统 API 以及熟悉 C+的面向对象的思想和一般的设计方法;后期是伴随着你 C+生涯的一生的,因为它没有终点的,这时候除了要继续加深对 C+的理解之外,还需要去学习各种各样的基于 C+的库,因为你需要在这些库的帮助下使用 C+去实现更具体的东西,比如一些 GUI 库如QT、 wxWidgets,一些游戏引擎如 Ogre、Unreal、Bigworld 等,一些网络库如ASIO、RakNet、ACE 等。这些库大多有一个特点就是他们是基于 C+,封装了底层的API 使得我们可以不必每次多去使用繁杂的 API 来实现我们想要的功能。当然,你也可以用 C+去封装这些 API,让自己成为一个库作者,方便他人。学习 C+,学习 C 和 C+的库,学习其它各领域的 C+库,好好的使用这些库或者自己写一些库,其它一些你能想到的与 C+相关的事情。怎样才能用 C+来做事情通常我认为如果只使用最基本的 C+以及其内置库来做事情,那么能做的事情始终是有局限的,因为 C+的库毕竟是有限的,我们能用它来写一些核心代码,因为这部分代