C連合と列挙

2398 ワード

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の順に与えられます.1つの列挙定数にのみ値を付与し、後続の列挙定数に値を付与しない場合、後続の定数には後続の値が付与されます.
    //    
    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は、同じメモリ領域に異なるデータ型(同時記憶ではない)を格納できるデータ型です.各コンビネーションは、さまざまなデータ型を格納できます.構造とは異なり、コンビネーションは1つの値しか格納できません.コンパイラは、コンビネーション宣言で最大バイトを使用するタイプを格納できるように十分なメモリ領域を割り当てる必要があります.
    構造と同様:結合変数名はポイント演算子を介してメンバーにアクセスし、結合ポインタは間接演算子->を介してメンバーにアクセスします.構造には匿名構造があり、連合にも匿名連合がある.
    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));