typedef は既存の型に新しい名前をつける。一般的な形式は次のとおり。
typedef 既存の型名 新しい型名;
次の例では、signed char に新しい型名 smallint をつけて、変数 i を宣言するのに使っている。
#include typedef signed char smallint; int main(void) { smallint i; for (i = 0; i < 10; i++) { printf("%d\n", i); } return 0; }
typedef を使っても元の型名が無効になるわけではない。上の例では signed char も型として使える。 また、typedef を何度も使って同じ型に違う名前をいくつもつけることができる。しかも、typedef でつけた型名は、既存の型として扱うこともできる。次の例では、変数 d の型は depth として宣言しているけど、実体としては int だ。
typedef int height; typedef height width; typedef width depth; depth d;
typedef を使って新しい型名をつけるのには、2つのメリットがある。 1つはプログラムの移植性に関わる問題で、例えば2バイト長の変数が使いたい場合、int が2バイトの環境では次のようにして、変数の型を myint にしておく。
typedef int myint; myint i;
そして、2バイトの型が short int の環境に移植するときには、typedef 文だけを変更すればいい。
typdef short int myint;
プログラム中で使っている myint を修正する必要はない。 もう1つは、型名に自己説明的な名前をつけることができることだ。次のようにしておけば、subtotal として宣言された変数が「小計」を表すことをプログラムから読み取れる。
typedef double subtotal;