第一章C十十能篷 11 / wDon't disnla coutNeither does this" / 因为第一行有C注释的起始符,最后一行有C注释的结束符,所以编译器把第二行和 第三行全部滤去,其中包括∥后面的C十十注释。 若在调试程序时需要暂时剩掉某一行,只需在该行前面插入∥即可。例如: ∥cout<<wYour age?: ∥Prompt for user's age cout前面的∥使这行程序全部成为注释,其中也包括注释∥Prompt for user'sage,程序 清单1.2(COMMENT.CPP)为读者示范了如何使用C和C++注释其中包括用∥建立区 分框,以使用/*和/产生多行注释。 程序清单1.2 COMMENT.CPP 1:/comment.cpp-Demonstrates C and C++comment styles #include <stream.hpp 5:∥∥∥∥∥∥∥∥∥∥∥∥∥∥∥N∥∥∥A∥∥∥∥ 6:∥Author:Tom Swan 7:∥Revision:1.007/13/1990 Time:03:50 pm 10 :main() 12 13: cout<<"A Brief C++Commentary'\n"Display title cout<n"Display blank line under title 5 This p 17 18: than one line.*/ 19: 20: cout<This is not a comment.n'in"; cout This also is not a comment./nn 2 24: cout/This is a comment./"This text is displayed.n" 25:} 运行COMMENT时,会看到编译器将忽略任何注释符中的串,这是因为串的双引号告 诉编译器,不能把串作为程序,而是逐字取文本。这对程序清单同样适用。串的双引号中的‘: 注释符同其他字符一样被处理 从现在起,本书全部程序清单都使用C十十注释作开始,类似前面例子的第一行。该行 用文件名标识程序并描述程序的功能。 第二个注释例子见程序清单1.3,它使用了一个C注释和一个C++注释,这只是为了 解释这个程序什么也不做
C十十客用峰州表拉 程序清单1.3 NOTHING.CPP 1://nothing.epp-A mere shell of a program 2 /This program does nothing! 6:} NOTHING程序是C++中最小的程序(程序忽略注释)。在DOS提示符下列出目录, 可看到NOTHING.EXE文件的大小。该文件占3650字节,这表明编译器的效率还是较好 的,有些编译器编译这个程序后会产生8K,10K或更大的EXE文件。 1.1.4标识符 标识符是可写人程序的唯一符号。函数名称mai就是一个标识符,它按名标识函数。选 好标识符是编写可用程序的最基本训练。 C+十识别许多如main那样的保留标识符。标识符包括大小字母、数字和下划线,并且 可达127个字符长。另外,标识符必须以A-Z这26个大小写字母开始,如fn1或Catch:22. 标识符123abc是非法的,abc123是合法的。 也可以使用下划线把较长标识符中的名词分开,如head_count,bottom_of_the_barrel。 通常在C语言中不能在标识符首位放下划线,然而C十十允许如-value和-overandunder这 样的标识符,只要不与类似开头的系统标识符相冲突,如果读者不使用以下划线开始的标识 符,就永远不会产生与系统标识符相冲突的标识符。 1.1.5标识符大小写 在C+十中,大小写是有区别的。例如keyPress,keypress和key-pres是三个不同的标 识符。因此在使用健盘键人标识符时,最好全部用大写,或全部用小写,以免出现不必要的麻 大多数C和C++程序员用小写字母输入标识符。全部大写的单词,如KYCOORD和 PAYMENT读起来较费劲。而小写字母xycoord和payment在屏幕上读就更方便一些。还 有些程序员采用大小写混合使用,它们不写array-of-names或arrayofnames而写 arrayOfNames。小写字母用何种方式,一个人的习惯各有不同,但具体使用何种方式一定要 考忠是否好用且不易出错。 1.1.6关键字 关键字是C十十为自用而保留的标识符,如关键字包括auto,loat,signed,void和while. 这些关键字不可作为用户自定义的标识符,它们是有特定含义的并且不能改变。 附录A列出了所有C十十的保留关健字。读者在学习本书的过程中,会遇到全部关键 字,并学会如何使用C十+的关键字。 1.1.7标点符 分号结束C十十的语句,它是一个标点符。在前面学过的左、右圆括号也是标点符
第一幸C+十瓶连 13 标点符是一类简写的关键字,它对编译器而言,是一种有特定含义的符号(可由一、二或 三个字符组成)。C十+标点符集包括以下符号: 正如其他关键字和符号一样,当在本书中遇到它们时,读者应学会使用它们。它们的用 法是非常直观的。 1.1.8分隔符 分隔符有很重要的一点不同于标点符,它们是不可见的.正因为它们在任何地方均不可 见,所以用空白描述它们。C+十分隔符包括空格、制表符(tabs)、回车以及加进文本中的换 行符 通常,C十十忽略空白,只要用户不使用空格分隔标识符、数字和其他应该连在一起的 结构形式。所有空白对C十十而言其含义是一样的,它可以解释语句为什么能写在多行。对 C+十,两个语句被软回车或空格分开时,其含义相同。事实上,代睿程序清单1.1所表示的 “锯齿形”程序风格,我们可写程序:· 编译器仅关心函数mai部分和其中的符号是否被正确地用于分隔和加标点。C十十并 不关心这些分隔是行终止符还是空格。显然,这种风格使程序更难读和难以调试。 1.1.9头文件 前面给出的大多数程序和清单的开头都类似于: #include <stream.hpp> 当编译器处理此行时,它去读取STREAM.HPP,即一种被用户编译器支持的头文件的 内容,其结果与该文件文本就在程序该位置上存在一样。显然,由于每一个所写的程序都没 有去拷贝STREAM.HPP,这大大地节省了空间,但也意味着在包含该文件的程序中就自动 执行STREAM.HPP文件了 典型头文件包含声明、定义和其他程序所需使用的指令。如果读者试着从程序清单1. 中删除#include语句,将接收到从编译器发出的错误信息,在这种情况下,因为cout和相关 的程序设计被存储在STREAM.HPP文件中,所以程序保持不动如果在程序中没有包含 该文件,编译器不知道cout是什么或怎样去使用输出流。 关键字#include(确切他说是两个符号,标点符#和关健字include)是送给编译器的 个指令,随后跟着一个将要包含到此位置的磁盘文件名。大多数C+十程序都是以一条或几 条这种include语句开始的。尖括号<和>括起的文件名告诉编译器在存有.HPP和,H文 件的标准include目录中寻找该文件,它通常被分配在NCLUDE环境变量指定的路径上。 include语句可写成: #include <stdio.h #include"newmath.h include "program.h
14 C十十雾用椿的教程 第一行含有一个存储在include目录中的STDIO.H文件名。第二和第三行含有名为 NEWMATH.H和PROGRAM.H的文件,由于这两个文件是用双引号而不是用尖括号括 起来的,编译器在当前目录而不是在include目录路径下查找这两个文件 对编译器支持的标准头文件使用尖括号,对自己建立的文件使用双引号.读者将会在本 书以后的程序清单中看到使用这两种表示的例子。 注:头文件名通常用扩展名.H(C语言头)或.HPP(C+十头)结束。扩展名并不特别重 要,读者可以用三个字特的任何名字结来头文件名,但最好以方便为本,用.H或, HPP命名头文件,这样会很快地在磁盘文件中找到头文件。 1.2变量 在C十+中,变量是内存中被命名的存储单元(见图1.1)。变量可以存储所有数据类 型,即申,数字或多部分的结构。典型的变量都有一个描述其作用的名字,通常用户可使用任 何自己喜欢的变量名。作为图示,名字指针指向存储该值的存储单元,但可以忽略这个事实, 在程序中认为名字和值是一回事。 Memory* retie 3.14159 6aepeey 图1.1变量是一个在内存中被命名的存有一个值的存储单元 所有变量都有一个共同的特点:一个附加的数据类型。这意味着,对一个变量要求选择 个合适的名字,必须告诉编译器你希望它存储什么类型的信息。表1.1列出了C+十通用 的数据类型,每种类型给出了例子、类型大小(以字符计)、类型变量值的范围】 表1.1通用C+十数据类型 数据类型 实例 大小 最小 最大 cha 255(或ASCD int 1024 32,768 32,76 long 262144 4 -2,147,483,648.,2,147,483,637 float 10.5 1.5E-45.3.4E38(近似) double 0.00045 5.0E-324.1.7E308(近似) long double le-8 8 同double
第一章C十十概述 15 注:所有C十十版本不一定具有存储相同字节量的数据类型变量。表1.1所列出的是 对本书编译器的信息。其他编译器可嵌列出相同数据类型的存储内容。然而,chr变 量总占用一个宇节。 在程序中创建一个变量,以数据类型开始并以一个标识符或分号结束。例如,创建一个 名为yesno的char变量,可以键入: char yesnoi 这称为定义,因为它定义了在存储器中存储一个变量的空间。在此情形下,一个字符占一个 字节空间,用户可把该变量定义和其他变量定义插人到任何位置,如函数内部、外部、语句之 间、块中等等,然而请注意,存储单元的定义影响编译器创建存储变量空间的方式,并且可能 影响程序运行的方式。为此,本书将在函数main前和随后的main花括号后定义所有变量。 1.2.1用定义预置变量 有两种预置变量(即给它们赋初值)的方法。第一种方法在大多数情况下是最好的,因为 它连接了一个变量的定义和置变量的初值的赋值: char yesnoY' 它创建了char类型的yesno变量并把字符“Y”赋给该变量。“赋值”即“在存储器中该变 量名表示的存储单元中存储”这个定义和前面所述定义类似,只是以等号结尾,并且值被存 在变量中。例如: 变量counter是int类型的并被赋初值1。变量weight是loat类型并被赋值155.5,如 果把这些定义插入到一个测试程序中,则可用 cout <<"yesno=<<yesno <<n'; cout "couner counter << cout <<"weight="<weight<'n'; 语句显示它们的值。当编译这些语句时,编译器用从存储器恢复的关联值替代变量名 esno,counter和weight。然后,编译器把这些值转换为文本形式,并用输出流语句显示。由 于每一个变量都被限定了一个特定的数据类型,C++知道它将把yeso显示为一个字符, 把counter显示为整数,weight显示为浮点数。 程序清单1.4(VARIABLE.CPP)演示了如何根据表1.1预置所有数据类型的变量。每 个变量定义以适用于每一种数据类型的形式赋每一个初值。输出流语句显示了这些值。 程序清单1.4 VARIABLE.CPP 1:/variable.epp-Common variable 3:#include <stream.hpp 4: