-
标识符的含义
标识符也称为名字,可以指代多种实体:函数、结构标记、
联合标记和枚举标记;结构
成员或联合成员;枚举常量;类型
定义名;标号以及对象等。对象有时也称为变量,它是一
个存
储位置。
对它的解释依赖于两个主要属性:
存储类和类型。
p>
存储类决定了与该标识对象
相关联的存储
区域的生存期,
类型决定了标识对象中值的含义。
名字还具有一
个作用域和一
个连接。
作用域即程序
中可以访问此名字的区域,
连接决定另一作用域中的同一个名字是否
指向同一个对象或函数。作用域和连接将在
A.11
节中讨论。
A.4.1
存储类
存储类分为两类:自动存储类
(
automatic
)和静态存储类(
static
)。声明对象时使用的一
些关键字和声明的上下文共同决定了对象的存储类。
自动存储类对象对于一个程序块
(参见
A.9.3
节)来说是局部的,在退出程序块时该对象将消失。如果没有使用存储类说明符,或
者
如果使用了
auto
限定符,
则程序块中的声明生成的都是自动存储类对象。
声明为
register
的对象也是自动存储类对象
,并且将被存储在机器的快速寄存器中(如果可能的话)。
静
态对象可以是某个程序块的局部对象,也可以是所有程序块的外部对象。无论是哪一
<
/p>
种情况,
在退出和再进入函数或程序块时其值将保持不变。
在一个程序块
(包括提供函数代
码的程序块)内,静态对象用关键字
static
声明。在所有程序块外部声明且与函数定义
在
同一级的对象总是静态的。可以通过
static
关键字将对象声明为某个特定翻译单元的局
部
<
/p>
对象,这种类型的对象将具有内部连接。当省略显式的存储类或通过关键字
extern
进行
声
p>
明时,对象对整个程序来说是全局可访问的,并且具有外部连接。
A.4.2
基本类型
基本类型包括多种。附录
B
中描述的
标准头文件
中定义了本地实现中每种
p>
类型的最大值和最小值。附录
B
给出的数值表示最小的可接受限度。
声明为字
符(
char
)的对象要大到足以存储执行字符集中的任何字符
。如果字符集中的
某个字符存储在一个
char
类型的对象中,则该对象的值等于字符的整型编码值,并且是非
负
值。其它类型的对象也可以存储在
char
类型的变量中,但其取值范围,特别是其值是否带
< br>符
号,同具体的实现有关。
以
unsigned char <
/p>
声明的无符号字符与普通字符占用同样大小的空间,但其值总是非
负的。以
signed char
显式
声明的带符号字符与普通字符也占用同样大小的空间。
说明:
本书的第
1
版中没有
unsigned char
类型,但这种用法很常见。
signed char
是新
增加的。
除
char
类型外,还有
3
种不同大小的整型类型:
short
int
、
int
和
long
int
。普
通
int
对象的长度与由宿主机器的
体系结构决定的自然长度相同。其它类型的整型可以满
足
p>
各种特殊的用途。
较长的整数至少要占有与较短整数一样的存储空间
;
但是具体的实现可以
使得一般整型
(
int
)与短整型(
short
int
)或长整型(
long
int
)具有同样的大小。
除非特别
说明,
int
类型都表示带符号数。
以关键字
unsigned
声明的无
符号整数遵守算术模
2
n
的规则,其中
,
n
是表示相应整数
的二进制位数,
这样,
对无符号数的算术运算永远不
会溢出。
可以存储在带符号对象中的非
负值的集合是可以存储在相应的无符号对象中的值的子集,
并且,
这两个集合的重叠部分的
表示是相同的。
单精度浮点数(
p>
float
)、双精度浮点数(
doubl
e
)和多精度浮点数(
long
double
)
中的任何类型都可能是同义的,但精度从前到后是递增的。
说明:
long
double
是新增加的类型。在第
1
版中,
long float
与
double
类型等价,但
现在是不相同的。
枚举是一个具有整
型值的特殊的类型。与每个枚举相关联的是一个命名常量的集合(参
见
A.8.4
节)。枚举类型类似于
整型。但是,如果某个特定枚举类型的对象的赋值不是其常
量
中的一个,或者赋值不是一个同类型的表达式,则编译器通常会产生警告信息。
因为以上这些类型的对象都可以被解释为数字,所以,可以将它们统称
为算术类型。
char
类型、各种大小的
int
类型(无论是否带符号)以及枚举类型都统称为整型类型(
< br>integral
type
)。
类型
float
、
double
p>
和
long
double
统称为浮点类型(
floating
type
)。
void
类型说明一个值的空集合,它常被用来说明不返回任何值的函数的类型。
A.4.3
派生类型
除基本类型外,我们还可以通过以下几种方法构造派生类型,从概念来讲,这些派生类
型可以有无限多个:
??
给定类型对象的数组
??
返回给定类型对象的函数
??
指向给定类型对象的指针
??
包含一系列不同类型对象的结构
??
可以包含多个不同类型对象中任意一个对象的联合
一般情况下,这些构造对象的方法可以递归使用。
A.4.4
类型限定符
对象的类型可以通过附加的限定符进行限定。声明为
const
的对象表明此对象的值不可
以修改;声明为
volatile
的
对象表明它具有与优化相关的特殊属性。限定符既不影响对
象
取值的范围,也不影响其算术属性。限定符将在
A.8.2
节中讨论。
A.5
对象和左值
对象是一个命名的存储区
域,左值(
lvalue
)是引用某个对象的表达式。具有合适
类型与
存储类的标识符便是左值表达式的一个明显的例子。<
/p>
某些运算符可以产生左值。
例如,
如果<
/p>
E
是一个指针类型的表达式,
*E
p>
则是一个左值表达式,它引用由
E
指向的对
象。名字“左值”
-
-
-
-
-
-
-
-
-
上一篇:四级翻译练习资料-汉译英
下一篇:COM编程入门篇