标识符的含义

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

标识符的含义

标识符也称为名字,可以指代多种实体:函数、结构标记、联合标记和枚举标记;结构

成员或联合成员;枚举常量;类型定义名;标号以及对象等。对象有时也称为变量,它是一个存储位置。对它的解释依赖于两个主要属性:存储类和类型。存储类决定了与该标识对象相关联的存储区域的生存期,类型决定了标识对象中值的含义。名字还具有一个作用域和一个连接。作用域即程序中可以访问此名字的区域,连接决定另一作用域中的同一个名字是否指向同一个对象或函数。作用域和连接将在A.11 节中讨论。

A.4.1 存储类

存储类分为两类:自动存储类(automatic)和静态存储类(static)。声明对象时使用的一些关键字和声明的上下文共同决定了对象的存储类。自动存储类对象对于一个程序块(参见A.9.3 节)来说是局部的,在退出程序块时该对象将消失。如果没有使用存储类说明符,或者

如果使用了auto限定符,则程序块中的声明生成的都是自动存储类对象。声明为register 的对象也是自动存储类对象,并且将被存储在机器的快速寄存器中(如果可能的话)。

静态对象可以是某个程序块的局部对象,也可以是所有程序块的外部对象。无论是哪一

种情况,在退出和再进入函数或程序块时其值将保持不变。在一个程序块(包括提供函数代码的程序块)内,静态对象用关键字static 声明。在所有程序块外部声明且与函数定义在

同一级的对象总是静态的。可以通过static 关键字将对象声明为某个特定翻译单元的局部

对象,这种类型的对象将具有内部连接。当省略显式的存储类或通过关键字extern 进行声

明时,对象对整个程序来说是全局可访问的,并且具有外部连接。

A.4.2 基本类型

基本类型包括多种。附录B 中描述的标准头文件中定义了本地实现中每种

类型的最大值和最小值。附录B给出的数值表示最小的可接受限度。

声明为字符(char)的对象要大到足以存储执行字符集中的任何字符。如果字符集中的

某个字符存储在一个char类型的对象中,则该对象的值等于字符的整型编码值,并且是非负

值。其它类型的对象也可以存储在char类型的变量中,但其取值范围,特别是其值是否带符

号,同具体的实现有关。

以unsigned char 声明的无符号字符与普通字符占用同样大小的空间,但其值总是非

负的。以signed char显式声明的带符号字符与普通字符也占用同样大小的空间。

说明:本书的第1 版中没有unsigned char 类型,但这种用法很常见。signed char 是新

增加的。

除char 类型外,还有3 种不同大小的整型类型:short int、int 和long int。普

通int 对象的长度与由宿主机器的体系结构决定的自然长度相同。其它类型的整型可以满足

各种特殊的用途。较长的整数至少要占有与较短整数一样的存储空间;但是具体的实现可以使得一般整型(int)与短整型(short int)或长整型(long int)具有同样的大小。

除非特别说明,int类型都表示带符号数。

以关键字unsigned 声明的无符号整数遵守算术模2n的规则,其中,n 是表示相应整数

的二进制位数,这样,对无符号数的算术运算永远不会溢出。可以存储在带符号对象中的非负值的集合是可以存储在相应的无符号对象中的值的子集,并且,这两个集合的重叠部分的表示是相同的。

单精度浮点数(float)、双精度浮点数(double)和多精度浮点数(long double)中的任何类型都可能是同义的,但精度从前到后是递增的。

说明:long double是新增加的类型。在第1 版中,long float与double类型等价,但

现在是不相同的。

枚举是一个具有整型值的特殊的类型。与每个枚举相关联的是一个命名常量的集合(参

见A.8.4 节)。枚举类型类似于整型。但是,如果某个特定枚举类型的对象的赋值不是其常量

中的一个,或者赋值不是一个同类型的表达式,则编译器通常会产生警告信息。

因为以上这些类型的对象都可以被解释为数字,所以,可以将它们统称为算术类型。char 类型、各种大小的int类型(无论是否带符号)以及枚举类型都统称为整型类型(integral type)。

类型float、double和long double统称为浮点类型(floating type)。

void类型说明一个值的空集合,它常被用来说明不返回任何值的函数的类型。

A.4.3 派生类型

除基本类型外,我们还可以通过以下几种方法构造派生类型,从概念来讲,这些派生类

型可以有无限多个:

∙ 给定类型对象的数组

∙ 返回给定类型对象的函数

∙ 指向给定类型对象的指针

∙ 包含一系列不同类型对象的结构

∙ 可以包含多个不同类型对象中任意一个对象的联合

一般情况下,这些构造对象的方法可以递归使用。

A.4.4 类型限定符

对象的类型可以通过附加的限定符进行限定。声明为const的对象表明此对象的值不可

以修改;声明为volatile 的对象表明它具有与优化相关的特殊属性。限定符既不影响对象

取值的范围,也不影响其算术属性。限定符将在A.8.2 节中讨论。

A.5 对象和左值

对象是一个命名的存储区域,左值(lvalue)是引用某个对象的表达式。具有合适类型与

存储类的标识符便是左值表达式的一个明显的例子。某些运算符可以产生左值。例如,如果E

是一个指针类型的表达式,*E则是一个左值表达式,它引用由E指向的对象。名字“左值”来源于赋值表达式E1=E2,其中,左操作数E1必须是一个左值表达式。对每个运算符的讨论

需要说明此运算符是否需要一个左值操作数以及它是否产生一个左值。

A.6 转换

相关文档
最新文档