第1章 快速入门
本章介绍C++(www.cppentry.com)的大部分基本要素:内置类型、库类型、类类型、变量、表达式、语句和函数。在这一过程中还会简要说明如何编译和运行程序。
读者读完本章内容并做完练习,就应该可以编写、编译和执行简单的程序。后面的章节会进一步阐明本章所介绍的主题。
要学会一门新的程序设计语言,必须编写程序。在这一章,我们将编写程序解决一个简单的数据处理问题:某书店以文件形式保存其每一笔交易。每一笔交易记录一本特定的书的销售情况,含有ISBN(国际标准书号,世界上每种书籍的唯一标识符)、销售册数和销售单价。每一笔交易形如:
第一个元素是ISBN,第二个元素是销售的册数,最后是销售单价。店主定期地查看这个文件,统计每本书的销售册数、总销售收入以及平均售价。我们要编写程序来进行这些计算。
在编写这个程序之前,必须知道C++(www.cppentry.com)的一些基本特征。至少我们要知道怎么样去编写、编译和执行简单的程序。这个程序要做什么呢?虽然还没有设计出解决方案,但是我们知道程序必须:
定义变量。
实现输入和输出。
定义数据结构来保存要处理的数据。
测试是否不同的记录含有相同的ISBN。
编写循环,处理交易文件中的每一条记录。
我们将首先考察C++(www.cppentry.com)的这些部分,然后编写书店问题的解决方案。
1.1 编写简单的C++(www.cppentry.com)程序
每个C++(www.cppentry.com)程序都包含一个或多个函数,而且必须有一个命名为main。函数由执行函数功能的语句序列组成。操作系统通过调用main函数来执行程序,main函数则执行它的组成语句并返回一个值给操作系统。
下面是一个简单的main函数,它不执行任何功能但是返回一个值:
操作系统通过main函数返回的值确定程序是否成功执行完毕。返回0值表明程序成功执行完毕。
main函数在很多方面都比较特别,其中最重要的是每个C++(www.cppentry.com)程序必须含有main函数,且main函数是(唯一)被操作系统显式调用的函数。
定义main函数和定义其他函数一样。定义函数必须指定四个元素:返回类型、函数名、圆括号内的形参表(可能为空)和函数体。main函数只能有一组受限的形参。本例中定义的main函数形参表为空。7.2.6节将介绍main函数中可以定义的其他形参。
main函数的返回值必须是int型,该类型表示整数。int类型是内置类型,即该类型是由C++(www.cppentry.com)语言定义的。
函数体是函数定义的最后部分,是以花括号开始并以花括号结束的语句块:
例中唯一的语句就是return,该语句终止函数。
注意return语句后面的分号。在C++(www.cppentry.com)中多数语句以分号作为结束标记。分号很容易被忽略,漏写分号将会导致莫名其妙的编译错误信息。
当return带上一个值,如0,这个值就是函数的返回值。返回值类型必须和函数的返回类型相同,或者可以转换成函数的返回类型。对于main函数,返回类型必须是int型,0是int型的。
在大多数系统中,main函数的返回值是一个状态指示器。返回值0往往表示main函数成功执行完毕。任何其他非零的返回值都有操作系统定义的含义。通常非零返回值表明有错误出现。每一种操作系统都有自己的方式告诉用户main函数返回什么内容。
1.1.1 编译与执行程序
程序编写完后需要进行编译。如何进行编译,依赖于操作系统和编译器。你需要查看有关参考手册或者询问在行的同事,以了解你所用的编译器的工作细节。
许多基于PC的编译器都在集成开发环境(IDE)中运行,IDE将编译器与相关的构建和分析工具绑定在一起。这些环境在开发复杂程序时非常有用,但掌握起来需要花费一点时间。通常这些环境包含点击式界面,程序员在此界面下可以编写程序,并使用各种菜单来编译并执行程序。本书不介绍怎样使用这些环境。
大多数编译器,包括那些来自IDE的,都提供了命令行接口。除非你已经很熟悉你的IDE,否则从使用简单的命令行接口开始可能更容易些。这样可以避免在学习语言之前得先去学习IDE。
1. 程序源文件命名规范
不管我们使用命令行接口还是IDE,大多数编译器希望待编译的程序保存在文件中。程序文件称作源文件(source file)。大多数系统中,源文件的名字由两部分组成:文件名(如prog1)和文件后缀。依据惯例,文件后缀表明该文件是程序。文件后缀通常也表明程序是用什么语言编写的,以及选择哪一种编译器运行。我们用来编译本书实例的系统将带有后缀.cc的文件视为C++(www.cppentry.com)程序,因此我们将该程序保存为:
C++(www.cppentry.com)程序文件的后缀依赖于你所运行的编译器,其他的形式还包括:
prog1.cxx prog1.cpp prog1.cp prog1.C |
调用GNU或微软编译器
调用C++(www.cppentry.com)编译器的命令因编译器和操作系统的不同而不同,常用的编译器是GNU编译器和微软Visual Studio编译器。调用GNU编译器的默认命令是g++:
这里的$是系统提示符。这个命令产生一个名为prog1或prog1.exe的可执行文件。在UNIX系统下,可执行文件没有后缀;而在Windows下,后缀为.exe。-o prog1是编译器参数以及用来存放可执行文件的文件名。如果省略-o prog1,那么编译器在UNIX系统下产生名为a.out而在Windows下产生名为a.exe的可执行文件。
微软编译器采用命令cl来调用:
C:\directory> cl –GX prog1.cpp
|
这里的C:\directory>是系统提示符,directory是当前目录名。cl是调用编译器的命令,-GX是一个选项,该选项在使用命令行接口编译程序时是必需的。微软编译器自动产生与源文件同名的可执行文件,这个可执行文件具有.exe后缀且与源文件同名。本例中,可执行文件命名为prog1.exe。
更多的信息请参考你的编译器用户指南。
2. 从命令行运行编译器
如果使用命令行接口,一般在控制台窗口(例如UNIX的shell窗口或Windows的命令提示窗口)编译程序。假设main程序在名为prog1.cc的文件中,可以使用如下命令来编译:
这里CC是编译器命令名,$表示系统提示符。编译器输出一个可执行文件,我们可以按名调用这个可执行文件。在我们的系统中,编译器产生一个名为a.exe的可执行文件。UNIX编译器则会将可执行文件放到一个名为a.out的文件中。要运行可执行文件,可在命令行提示符处给出该文件名:
执行编译过的程序。在UNIX系统中,即使在当前目录,有时还必须指定文件所在的目录。这种情况下,键入:
“.”后面的斜杠表明文件处于当前目录下。
访问main函数的返回值的方式和系统有关。不论UNIX还是Windows系统,执行程序后,必须发出一个适当的echo命令。UNIX系统中,通过键入如下命令获取状态:
要在Windows系统下察看状态,键入
C:\directory> echo %ERRORLEVEL%
|
习题
习题1.1 回顾你的编译器文档并确定它所用的文件命名规范。编译并运行本节的main程序。
习题1.2 修改程序使其返回-1。返回值-1通常作为程序运行失败的指示器。然而,系统不同,如何(甚至是否)报告main函数运行失败也不同。重新编译并回到你的程序,看看你的系统如何处理main函数的运行失败指示器。
【责任编辑:
董书 TEL:(010)68476606】