美文网首页
C 联合与枚举

C 联合与枚举

作者: 苏沫离 | 来源:发表于2018-11-22 22:54 被阅读0次

    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));
    

    相关文章

      网友评论

          本文标题:C 联合与枚举

          本文链接:https://www.haomeiwen.com/subject/cswrqqtx.html