Typedef
以下にコード例を示す。
通常、ある型のポインタ型変数を宣言する際、それぞれの変数名の前にアスタリスク*を記述する必要がある。
プログラマはerrptrがポインタ型node_t *であることを想定しているが、typoによりerrptrは値型node_tであると定義されてしまっている。これは微妙な構文エラーを引き起こす。
新たにnode_t *型を定義することでこのような記述ミスを回避できる。以下のコードがその例である。
これにより、errptrを含めて全ての変数がnode_t *型であることが保証される。
再代入や書き換えが不可能な文字列定数の配列(テーブル)を定義するときも、typedefを利用することで分かりやすくなる。
関数へのポインタを利用する場合も typedef を利用することで可読性を向上できる可能性がある。
なお、上記は以下のようにも書ける。
配列に対して typedef を利用することもできる。
なお、以下のようなコードに対する動作は未定義となる。グローバルスコープを持ち、アンダースコア_で始まる識別子、もしくは_で始まり、その次が大文字の識別子は予約済み識別子であり、それを宣言または定義した場合は動作未定義とされているからである。
C++ではtypedefをC言語同様にエイリアス宣言のために利用できるが、C++11ではusingキーワードによる文法も追加された。
C++11では、上記は以下のようにも書ける。
なお、typedefはテンプレート化できないが、C++11ではusingによるエイリアステンプレートが追加された。