構造体はtypedefと組み合わせて定義することがあります。Number_の別名Numberを定義しています。これによって、変数宣言時にstructキーワードの記述が不要になります。structによる定義の仕組み匿名構造体に対するtypedeftypedefによる別名と構造体のタグ名は同じでも良いアンダースコアが用いられた構造体についてstructによる構造体の定義との違いtypedefを用いなかった場合には、変数宣言時にstructキーワードの指定が必須となります。structが必須、省略不可}多くのケースでは、このstructキーワードの記述を省く目的として、typedefによる別名を活用することがほとんどです。Number;typedefによる構造体の定義方法は見慣れない記法かもしれませんが、仕組み自体は単純です。別名という宣言方法になっています。今回上記で紹介した構造体の定義方法は、この型の部分に構造体定義のための構文を直接指定する形となっています。人によっては以下のように書いたほうが最初は覚えやすいかもしれません。やっていることは同じです。別名の定義ちなみにtypedefで定義した別名に対してstructキーワードを指定することはできません。Number'匿名構造体に対するtypedefちなみに構造体のタグ名は省略することができるため、以下のような別名のみの定義も可能です。Number;typedefによる別名と構造体のタグ名は同じでも良い構造体のタグ名とtypedefによる別名には同じ名前を用いることができます。変数宣言時のstructキーワードで両者を区別することができるためです。typedefで定義された別名で宣言ただし実際の開発では、構造体の定義時にはタグ名を省略したり、タグ名と別名を区別したりするのが良いでしょう。名前の重複や余計な型名が増えると、IDE側の機能が若干使いづらくなる場合があります。機能などがその良い例。構造体のタグ名とtypedefによる別名が同名だと、ジャンプ先の候補リストが表示されてしまう場合がある。__CFString)。object;)を用いる必要があります。他にも、構造体の内部構造を隠蔽したり、ポインタとしての宣言を強制させるために、このような命名が取られることがあります。ちなみにアンダースコアで始まる命名やダブルアンダースコアが用いられた命名は予約済みとなっているため、ユーザ定義の型名にこの手の命名を用いることはできません。