2011-05-26 7 views
1
typedef intptr_t  ngx_int_t; 
typedef uintptr_t  ngx_uint_t; 
typedef intptr_t  ngx_flag_t; 

私たちはここから何をbenifitことができますか?私は正直に言うと1を考えることはできません...これらの `typedef`の目的は何ですか?

上記のコードでは、興味を持っている場合、それを確認し、有名なnginxのプロジェクトからです。

+0

http://stackoverflow.com/questions/2566027/what-is-the-use-of-typedef – Simone

+2

申し訳ありませんが、私はこの質問の質問者がtypedefと理解していると思います。彼の質問は、 ... – Krishnabhadra

+1

私の場合、typedefのこれらの種類のコードは醜いです...おとうさんのプログラミング.. – Krishnabhadra

答えて

0

私は2つの理由を知っている:U32、でいくつか:シンプルな複雑な宣言何か

  • ポータビリティは、異なるアーキテクチャで、種類は非常に単純な例として、単に異なった可能性を回し、

    • エイリアシングを場所は符号なし整数、その他と定義できます。符号なしロングタイプです。
  • +0

    移植性の点に同意できます。しかし、最初のものです.nope – Krishnabhadra

    -1

    私は人がこれを行うのを見る理由の1つは、実際のタイプを変更する必要がある場合は、typedefを変更する必要があると考えているということです。私はあまりにもその引数についてconvinedされていません。

    1

    typedefの目的の1つは、移植性です。例えば。異なるコンパイラおよびプラットフォームは、様々な型サイズを有する。 sizeof(int)on x86、Linux、gccはテキサスインスツルメンツのプロセッサと同じではありません:)しかし、まだintです。

    コードを移植するときに、

    typedef int INT32 
    

    は1が保存されます。

    typedefの別の目的は、より短い宣言をするために型を宣言することです。

    typedef sharted_ptr<MyClass> MyClassPtr; 
    

    そして今、あなたの代わりに、全体のshared_ptr ...文字列を書き込むと、タイプとしてMyClassPtr使用することができます。

    や構造とのtypedefの非常に一般的な使用法:

    typedef struct { 
        int x; 
        int y; 
    } Point; 
    

    または

    struct point { 
        int x; 
        int y; 
    } 
    
    typedef struct point Point; 
    

    両方のtypedefは、あなたがstructキーワードを毎回入力しないようしましょう。

    +0

    @ Zaur Nasibov、 'typedef int INT32'はコードを移植するときにどうすれば保存できますか? – DriverBoy

    +2

    コードが32ビットのintを必要とするが、intが例えば16ビットのプラットフォームでコンパイルしている場合は、typedefを 'typedef long INT32'に変更するだけで済みます。コード内のintのすべての出現を変更します。 –

    +0

    C99には固定サイズのint型があるため、C99を使用している場合は、独自のtypedefの代わりに使用します。 – Lundin

    1

    コードポータビリティではしばしば行われますが、特に組み込みシステムに関係します。

    整数値が絶対に32ビットである必要があるとします。ネットワーク/ディスク構造にマップする必要があるかもしれません。多分、その大きさの値を保持する必要があります。

    ここで、「int」が32ビットのコンパイラでコードを開発するとします。書く...

    struct s { 
    int a,b,c,d; 
    } 
    

    ...それはうまく動作します。あなたはintは唯一の16ビットですが、長くは32である、あなたは

    まだ
    struct s { 
    long a,b,c,d; 
    } 
    

    さらに悪いことに、これらすべての宣言を変更する必要がありますコンパイラに切り替える必要がある場合でも、あなただけ/検索することができませんあなたがおそらくサイズについて気にしない 'ints'のいくつかのために、置き換えてください。ですから、最善のアプローチは、これまでに次のとおりです。

    typedef long INT32; // change this typedef according to compiler 
    
    struct s { 
    INT32 a,b,c,d; 
    } 
    

    次に、あなたが必要とするすべてはのtypedefを変更することです。

    0

    コードを移植するときにポインタの型を変更したいという理由が考えられます。別のシステムでは、そこにさまざまなアドレッシングモード(「銀行」など)であるかもしれない、と彼らは複数持つ任意のシステムに、彼らは決してポートコードをした場合

    typedef far intptr_t  ngx_int_t; 
    

    のように、非標準的な構文を使用する必要があるかもしれません同じシステム上でアドレッシングモードを使用すると、ポインタの移植性が問題にならず、typedefが冗長になります。

    関連する問題