|
typedef (タイプデフ)は、プログラミング言語のCとC++のキーワードである。これはデータ型に新しい名前(エイリアス、シノニム)をつけるために使用される。プログラマが容易にソースコードを理解できるようにすることが目的である。== 使用例 == 一つのコード例: int coxes; int jaffa; ... coxes++; ... if (jaffa == 10) ... 別のコード例: typedef int Apples; typedef int Oranges; Apples coxes; Oranges jaffa; ... coxes++; ... if (jaffa == 10) ... 両方のコードの処理内容は同じである。2つ目の例で typedef を使ったことで、何が行われているかを容易に理解することが出来る。すなわち、一つの変数はリンゴ(Apples)に関する情報を含み、もう一つの変数がオレンジ(Oranges)に関する情報を含んでいることがわかる。別のコード例: struct var ; ここでは、ユーザ定義の型''var''が定義されている。''var''型の変数を作るために、C言語では以下のコードが必要である: struct var a; この例の最後に、以下の行を追加してみる: typedef struct var newtype; これにより、''var''型の変数を作るためには、以下のコードで十分となる: newtype a; 同じことは、以下のコードでも行うことができる: typedef struct var newtype; 構造体のタグ名を省略することもできる: typedef struct newtype; typedefは、自己参照構造体へのポインタの作成を簡単にすることも出来る。以下にコード例を示す: typedef struct Node_tag Node; struct Node_tag ; 通常、ポインタに割り当てるそれぞれの変数の前にアスタリスクを記述する必要がある: Node *startptr, *endptr, *curptr, *prevptr, errptr, *refptr; プログラマは errptr がポインタ型Node であることを想定しているが、Typoによりerrptr は値型Node であると定義されてしまっている。これは微妙な構文エラーを引き起こす。Node 型を定義することは、より良いことである。以下のコードがその例である:typedef Node *NodePtr; NodePtr startptr, endptr, curptr, prevptr, errptr, refptr; これにより、 errptr を含めて全ての変数がNode 型であることが保証される。関数へのポインタを利用する場合も typedef を利用することで可読性を向上できる可能性がある:#include typedef int binary_operator_t(int, int); static int add(int a, int b) int main(int argc, char *argv; int main(int argc, char *argv[]) なお、以下のようなコードに対する動作は未定義となる。下線から始まる識別子は予約済み識別子であり、それを宣言または定義した場合は動作未定義とされているからである。 typedef struct _Foo FOO; C++の構造体宣言では、潜在的に typedef が定義される。つまり、typedef キーワードを明示的に使わなくとも、データ型は直ちに(struct var ではなく)var で指定することができる。C++ではクラス内部で typedef を使用することで、クラス スコープのシノニムを定義することができるため、テンプレートを使用したジェネリックプログラミングやダックタイピングに都合がよい。C++標準ライブラリのSTLの実装では、このテクニックが利用されている。抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Typedef」の詳細全文を読む スポンサード リンク
|