1、typedef
typedef
工具是一个高级数据特性,利用 typedef
可以为某一类型自定义名称。这与#define
类似,但有几处不同:
-
typedef
创建的符号只受限于类型,不能用于值; -
typedef
由编译器解释,而不是预处理器; - 在首先范围内,
typedef
比#define
灵活;
//使用 dispatch_io_type_t 表示无符长整型
typedef unsigned long dispatch_io_type_t;
typedef
定义的作用域取决于定义所在位置,如果定义在函数内部,就具有局部作用域,受限于定义所在的函数,如果定义在函数外部,具有文件作用域。
使用 typedef
为现有类型创建一个名称,提高程序的可移植性;为常用的类型创建一个方便、易识别的类型名。
typedef
并没有创建任何新类型,它只是为某个已存在的类型增加了一个方便使用的标签。
2、枚举
使用枚举类型声明符号名称来表示整型常量,提高程序的可读性与可移植性。
使用关键字enum
,创建一个新类型并指定它可具有的的值。enum
常量是 int
类型,因此只要能使用 int
类型的地方就可以使用枚举类型。
枚举类型语法: enum 标记名 {枚举符1, 枚举符2,}
默认情况下,枚举列表中的常量被依次赋予 0、1、2 等值;如果只给一个枚举常量赋值,没有后面的枚举常量赋值,那么后面的常量会被赋予后续的值。
//枚举声明
enum DISPATCH_ROOT_QUEUE_IDX {
DISPATCH_ROOT_QUEUE_IDX_LOW_PRIORITY = 0,
DISPATCH_ROOT_QUEUE_IDX_LOW_OVERCOMMIT_PRIORITY,
DISPATCH_ROOT_QUEUE_IDX_DEFAULT_PRIORITY,
DISPATCH_ROOT_QUEUE_IDX_DEFAULT_OVERCOMMIT_PRIORITY,
DISPATCH_ROOT_QUEUE_IDX_HIGH_PRIORITY,
DISPATCH_ROOT_QUEUE_IDX_HIGH_OVERCOMMIT_PRIORITY,
DISPATCH_ROOT_QUEUE_IDX_BACKGROUND_PRIORITY,
DISPATCH_ROOT_QUEUE_IDX_BACKGROUND_OVERCOMMIT_PRIORITY,
};
{
//使用枚举类型
enum DISPATCH_ROOT_QUEUE_IDX queue;
}
3、联合
联合 union 是一种数据类型,它能在同一个内存空间中存储不同的数据类型(不是同时存储)。每个联合都可以存储各种数据类型。
与结构不同,联合只能存储一个值,编译器需要分配足够的内存空间以便它能存储联合声明中占用最大字节的类型。
与结构类似:联合变量名通过点运算符访问其成员,联合指针通过间接运算符 ->
访问其成员;结构有匿名结构,联合也有匿名联合。
typedef union {
struct dispatch_object_s *_do;
struct dispatch_continuation_s *_dc;
struct dispatch_queue_s *_dq;
struct dispatch_queue_attr_s *_dqa;
struct dispatch_group_s *_dg;
struct dispatch_source_s *_ds;
struct dispatch_source_attr_s *_dsa;
struct dispatch_semaphore_s *_dsema;
struct dispatch_data_s *_ddata;
struct dispatch_io_s *_dchannel;
struct dispatch_operation_s *_doperation;
struct dispatch_disk_s *_ddisk;
} dispatch_object_t __attribute__((transparent_union));
网友评论