typedef

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;