2.3  C++兵器谱

正所谓“工欲善其事,必先利其器”,而要想做好C++程序设计,自然也离不开几件像样的兵器。下面我们就来看看C++兵器谱上有哪些神兵利器值得我们学习掌握。排在兵器谱上首要位置的就是C++集成开发环境。所谓的集成开发环境(Integrated Development Environment,IDE),就是一套用于开发C++程序的软件集合,一般包括代码编辑器、编译器、调试器和图形用户界面工具等,是集代码编写功能、分析功能、编译功能、调试功能于一体的开发软件套装。一些复杂的新型IDE甚至融合了建模功能、测试功能、项目管理等,几乎完整覆盖了软件开发的整个生命周期。

因为Windows和Linux/UNIX这两大平台应用领域的不同,导致这两大平台上的C++开发工具也各不相同。

2.3.1 在Linux/UNIX平台上用GCC开发C++程序

在Linux/UNIX平台上,虽然也有图形化的集成开发环境可以使用,但为了追求效率, C++程序的开发更多地还是以命令行的形式进行的。比如,Linux/UNIX平台上的C++程序员使用vi编辑源代码;使用GCC编译代码;使用GDB调试代码等等。从严格意义上说,这些工具并不是一个完整的集成开发环境,它们就像“八国联军”一样,共同拼凑成一条Linux/UNIX平台下开发C++程序的工具链,但又只是各自负责完成C++程序开发中的某个环节。这其中最重要的,就是GCC所负责的编译环节。

在前面的例子中,我们用Windows平台上的Visual Studio简单几步就完成了一个C++程序的创建,而同样的工作,要是在Linux/UNIX平台上进行,就没这么简单了。实际上,在Linux/UNIX平台上,因为缺少图形化的集成开发工具的支持,C++程序的创建基本上都是用GCC编译器,再配合其他编辑调试工具,以手工的方式完成的。

我们通常所说的GCC(GNU Compiler Collection)编译器,实际上是多个编译器的统称。GCC最开始原本只能编译C语言程序,但是,当C++逐渐流行起来之后,GCC很快地被扩展到可以编译C++程序。之后,GCC更是被进一步扩展,变得可支持Fortran、Objective-C以及Java等主流开发语言的编译,成为一个编译器套件。从GCC的应用来看,它是Linux/UNIX平台上最常用的编译器。同时,在基于Linux/UNIX平台的嵌入式开发领域,GCC也是用得最普遍的一种编译器。除此之外,GCC在其他主流的操作系统上都能运行,如Solaris、Windows、Mac OS X操作系统等。正是GCC编译器应用的广泛性,使其成为C++编译器的事实标准。

GCC是一个基于命令行执行的工具,如果我们要使用它编译一个C++源文件,其命令格式如下:

g++ [编译选项] 源文件名

其中,g++是GCC的C++编译命令,其后的编译选项,是用于控制编译器的编译行为的。我们常用的编译选项有:

Ÿ   -c

此选项表示只编译,而不链接成为可执行文件,编译器只是将输入的.cpp源代码文件编译生成以.o为后缀的目标文件;

Ÿ   -o 输出文件名

这个选项用于指定输出文件的名称。如果在编译生成可执行文件时不给出这个选项,GCC 将会生成默认的可执行文件。在Windows平台上,这个文件被命名为a.exe,而在Linux/UNIX平台上,则对应地被命名为a.out;

Ÿ   -g

使用“-g”编译选项将会产生调试工具(例如,GDB )所必需的符号信息,要想对源代码进行调试,我们就必须加入这个编译选项;

Ÿ   -O

这个选项表示编译器将对程序进行优化编译、链接。采用这个选项,整个源代码会在编译、链接过程中被优化处理,这样可以在一定程度上提高可执行文件的执行效率。但是,有所得必有所失,使用优化选项后,编译、链接的速度就会相应地变慢一些;

Ÿ   -I 目录名

这个选项可以指定GCC的附加头文件目录。我们在使用第三方提供的函数库的时候,常常会用到这个选项,用于将函数库的include目录添加为GCC的附加头文件目录。

实际上,g++所提供的编译选项可能有数百个之多,我们只需要了解以上这些常用的编译选项就可以了。到真正需要其他编译选项的时候,可以查阅相应的参考手册。

在了解了GCC的基本使用方法之后,我们也可以在Linux/UNIX平台上新建一个HelloWorld.cpp源文件,并编辑其中的内容跟前面的HelloWorld.cpp文件相同,然后我们就可以用下面的命令,将源代码文件HelloWorld.cpp利用g++编译成一个可执行的HelloWorld程序:

g++ -O -o HelloWorld HelloWorld.cpp通过这样一个简单的命令,我们就将HelloWorld.cpp这个C++源文件优化编译并链接成了一个可执行文件HelloWorld。现在执行这个可执行文件,就可以在Linux/UNIX平台上用C++程序向C++世界打个招呼了:

./HelloWorld  ß启动可执行文件

Hello World!    ß输出的内容

这里所介绍的GCC只是Linux/UNIX平台上C++程序开发工具箱中最重要的一个工具,它往往还需要配合其他工具(诸如文本编辑器vi、辅助编译工具make等等)一起使用,才能形成一个完整的工具链,才能灵活高效地完成C++程序的开发。

2.3.2 在Windows平台上用Visual C++开发C++程序

与在Linux/UNIX平台上要靠各种工具拼凑成一个“八国联军”来开发C++程序相比,Windows平台上的C++程序开发就要简单多了。在Windows平台上,有众多的图形化的集成开发环境,除了我们前面所介绍的最常用的Visual Studio之外,还有支持跨平台的Eclipse CDT和Code::Blocks,更有小巧的Dev-C++等。这些集成开发工具的合理使用,无疑会大大提高我们的开发效率。而在众多的集成开发环境中,应用最广泛的还是Visual C++。它是微软的开发套件Visual Studio中的一个重要组成部分。自1992年微软推出Visual C++ 1.0以来,经过20多年的不断发展,Visual C++已经成为了Windows平台上功能最强大、应用最为广泛的图形化应用程序开发工具之一。在某些领域,比如操作系统编程、游戏开发、图形图像处理、COM编程、网络编程等,Visual C++具有不可比拟的优势,成为众多程序员的首选C++开发工具。

Visual C++虽然非常强大,但就学习和练习C++而言,显得有点太过复杂,其中的很多功能,我们现在根本还用不上。过多的功能,反而会干扰我们对C++的学习。为此,我们可以选择它的简化版本——Visual C++ Express。简化版本剥离了大多数对初学者而言不太常用的功能(比如对MFC的支持等),但保留了进行C++开发所必须的最基本功能(比如,编译器、标准库、代码编辑器等),完全可以满足我们现在对IDE的需要。如果我们只是想在Windows平台上学习和练习C++,Visual C++ Express应该是我们的最佳选择。

2.4  C++世界旅行必备的物品

每个旅行者的背包中都少不了一把瑞士军刀、一瓶云南白药。同样,每个C++世界的旅行者的背包中也少不了几款好用的工具软件。

2.4.1  时间机器——代码配置管理工具Visual Source Safe

在实际的开发过程中,常常会遇到这样的情况:为了验证某个方案是否可行,我们修改了源代码文件,可是后来却发现这个方案行不通,要想再回到最初尚未修改的状态时,却发现代码已经被我们改乱了,再也回不去了。这时我们会想,要是有个时间机器,能够回到过去,取回原来的尚未被修改的代码该有多好啊。幸运的是,微软为我们准备了这样的工具——Visual SourceSafe(简称VSS),它就是能让我们回到过去,取回代码的时间机器。

本质上讲,VSS就是一个源代码配置管理工具,通过它,可以对现有代码进行安全的改动。它的基本过程是这样的:项目中的所有文件都保存在服务器上,在每次修改代码之前,需要将代码文件从服务器签出(check out)到本地进行修改;修改完成之后,再将代码文件从本地签入(check in)到服务器保存。每次签入、签出都会在服务器上留下相应的时间戳,相当于给当时的代码拍了一张照片。如果发现某次修改引入了新的错误,想要得到修改之前的代码,那么可以将代码回滚到修改之前的某个时间点,用当时拍下的照片恢复得到修改之前代码。这就像拥有了一部时间机器,让我们可以在代码的修改历史中任意穿越,再也不会发生因为错误修改想要回到修改之前却回不去的惨剧。同时,它还可以跟踪代码随着用户、项目和时间的变化而经历的更改,方便对代码进行更新维护。

2.4.2  CodeProject和Stack Overflow

在第1章曾经介绍过,学好C++的唯一途径就是“多读多写多思考”。多读,就是多阅读他人的优秀代码,甚至他人的经验教训。在CodeProject网站上,我们可以找到很多优秀的示例代码;而在Stack Overflow网站上,更多的是他人宝贵的编程经验。这两个网站,都应该是我们“多读”的对象。

1. CodeProject

CodeProject(http://www.codeproject.com)是一个有名的Windows程序设计技术社区,主要的使用者是Windows平台上的程序员。该网站最大的特点就是,其中的技术文章不仅介绍了具体的某项开发技术,同时还提供相应的源代码下载。让我们不仅有得看,还有得练。

2. Stack Overflow

Stack Overflow(http://stackoverflow.com)是一个与程序设计相关的IT技术问答网站,除了C++之外,它还覆盖了C#、Java、PHP等热门技术领域。用户可以在网站免费提交自己在开发过程中遇到的问题;浏览其他用户的问题和经过投票排序后的优秀答案;以及搜索自己感兴趣的问题等等。Stack Overflow中的问题和答案,都是来自于具体的实践,往往我们自己在实际编程中遇到的问题,在这里都能找到现成的答案。更重要的,这些问题的答案都是来自于世界各地的技术高超经验丰富的程序员,并经过用户的投票排序,所以答案的质量特别高。Stack Overflow现在已经发展成为了全球IT界最受欢迎的技术问答网站。

所以,如果我们在学习中遇到什么难以的问题,可以去这里问问,寻求来自世界各地的答案。即使没有问题,也可以经常去这里逛逛,看看其他人遇到的问题和相应的解决方法,说不定以后自己也会遇到类似的问题,就知道该如何解决了。

2.4.3  C++词典——cplusplus.com

学习英语,少不了一本英语词典。同样,学习C++语言,也少不了一本C++词典。

cplusplus.com(http://www.cplusplus.com)就是一本C++词典。它包含了C++相关的基本信息(C++的概要描述、发展历史以及FAQ等)、技术文档(C++部分特性的介绍和教程)、标准库索引(对标准库中重要的类、函数、对象等进行了详尽的描述,并提供了简短的示例)和论坛等。在学习的过程中,我们常常需要查阅某个库函数的使用方法,或者是某个类的成员函数等,这些内容几乎都可以在这里找到最权威的解释,同时它还配有简短的例子,让我们可以对使用方法一目了然。真可以说是一站在手,万事无忧。

你好,C++(6)2.3 C++兵器谱的更多相关文章

  1. 用CIL写程序:你好,沃尔德

    前言: 项目紧赶慢赶总算在年前有了一些成绩,所以沉寂了几周之后,小匹夫也终于有时间写点东西了.以前匹夫写过一篇文章,对CIL做了一个简单地介绍,不过不知道各位看官看的是否过瘾,至少小匹夫觉得很不过瘾. ...

  2. docker4dotnet #1 – 前世今生 & 世界你好

    作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的,眼瞧着那些 java, python, node.js, go 甚至连p ...

  3. java 写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中

    package com.beiwo.homework; import java.io.File; import java.io.FileOutputStream; import java.io.IOE ...

  4. 你好,欢迎来到我的博客,我是博主royalmice1

    你好,欢迎来到我的博客,我是博主royalmice

  5. 你好,欢迎来到我的博客,我是博主royalmice

    你好,欢迎来到我的博客,我是博主royalmice

  6. 按要求编写Java应用程序。 (1)创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”

    package java1; public class People { public String name; public int age; public String sex; public S ...

  7. 创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”

    package com.chuoji; public class People { private String name; private int age; private String sex; ...

  8. 大数据分析与机器学习领域Python兵器谱

    http://www.thebigdata.cn/JieJueFangAn/13317.html 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/ ...

  9. (1)创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”

    package a; public class People { private String name,sex; private int age; private double height; pu ...

随机推荐

  1. phpCMS V9 自定义添加 全局变量{SKIN_PATH}方法

    前言:目前v9版本新增{js_path},{css_path},{img_path}三个全局变量,代替2008版本中{skin_path},样式图片脚本分开路径,确实达到了一定在后台管理方便的目的,但 ...

  2. Python学习之--异常处理

    Python中的Exceptions是所有异常的基类,内置的异常类都放在了exceptions模块中,通过dir()函数可以看到这些内置的类 通过raise 语句触发异常,如 >>> ...

  3. mongodb工具

    可视化管理工具 http://www.mongovue.com/ mongodb use case http://www.mongodb.org/about/applications/ mongodb ...

  4. win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装

    win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装 http://blog.csdn.net/jiangzeyun/article/details/41676639

  5. Delphi Dcp 和BPL的解释

    dcp = delphi compiled package,是 package 编译时跟 bpl 一起产生出来的,记录着 package 中公开的 class.procedure.function.v ...

  6. samba服务器的搭建及使用

    一.Samba服务器的安装及配置 1.samba服务器的安装 rpm –ivh /mnt/Packages/samba-3. 5. 10-125. el6.i686.rpm 需要挂载红帽6的光盘 2. ...

  7. HDU_2013——蟠桃记,反向推理

    Problem Description 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!什么问题?他研究的问题是蟠桃一共有多少 ...

  8. SQL VS NoSQL

    (关系型与非关系型)数据库的区别: 关系型和非关系型数据库的主要差异是数据存储的方式 1.1 数据表 VS 数据集 关系型数据天然就是表格式的,因此存储在数据表的行和列中.数据表可以彼此关联协作存储, ...

  9. Odoo “坑” 系列之 XML中的布尔类型

    在Odoo中试图通过XML方式更新某条Record的值,却意外发现根本不能更新,经查,对于XML中Boolean类型的字段,更新的方式应该采用eval的方式.

  10. hdu2209翻纸牌游戏

    翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...