167. 联合是一种数据类型,它能够在同意内存里面存储不同的数据类型。声明一个联合类型的变量时,编译器会分配足够的空间,以便能够存储联合声明中占用字节最大的类型。联合的初始化方法有三种:把一个联合初始化为另一个同类型的联合;初始化联合的第一个元素;根据C99标准,使用指定初始化器。在联合中,一次只存储一个值。即使有充足的空间,也不能同时存储两个及两个以上的的值。
168. 可以利用枚举类型声明符号名称来表示整型常量,使用enum关键字,可以创建一个新“类型”并指定它可具有的值。枚举中的每一个符号常量,被称为枚举符。
169. 虽然枚举符是int类型,但是枚举变量可以是任意整数类型,前提是该整数类型可以存储枚举常量。需要注意的是,C枚举的一些特性并不适用于C++。比如,C允许变量使用++运算符,但是C++标准不允许。
170. 默认情况下,枚举列表中的常量被赋予0、1、2等。在声明时,也可以为枚举常量指定整数值。如果只对一个枚举常量赋值,那么后续的枚举常量会被依次递增赋值。
171. C语言使用名称空间标识程序中的各部分,即通过名称来识别。作用域是名称空间概念的一部分:两个不同作用域的同名变量不冲突。两个相同作用域的同名变量冲突。名称空间是分类别的。在特定作用域中的结构标记、联合标记和枚举标记都共享相同的名称空间,该名称空间与普通变量使用的空间不同。这意味着在相同作用域中变量和标记的名称可以相同,不会引起冲突,但不能在相同作用域中声明两个同名标签或同名变量。但是在C++中不允许这么做,因为它把标记名和变量名放在相同的名称空间中。
172. typedef创建的符号名只受限于类型,不能用于值。typedef由编译器解释,不是预处理器。