【C++/C言語】typedef とは?既存のデータ型に別名を付けて分かりやすくする方法

目次

はじめに

C++やC言語でプログラミングをしていると、unsigned long long int のように、データ型名が非常に長くなってしまうことがあります。また、「年齢」を格納する int と、「ID」を格納する int のように、同じデータ型でもプログラム内での「意味」を区別したい場面があります。

このような場合に便利なのが typedef (type definition の略) というキーワードです。typedef を使うと、既存のデータ型に対して、プログラムの文脈に合わせた、分かりやすい別名を付けることができます。

この記事では、typedef の基本的な使い方と、それによってコードの可読性がどのように向上するのかを解説します。


typedef の使い方

typedef は、以下のような構文で、既存のデータ型に新しい名前を付けます。

typedef 既存のデータ型 新しい型名;

サンプルコード

このコードは、unsigned long というデータ型に Population(人口)という新しい名前を付け、その新しい型名を使って変数を宣言します。

#include <iostream>

// --- 1. typedefで新しい型名を定義 ---
// 「unsigned long」というデータ型に、「Population」という別名を付ける
typedef unsigned long Population;

int main() {
    // --- 2. 新しい型名を使って変数を宣言 ---
    // 「unsigned long tokyo;」と書くのと同じ意味になる
    Population tokyo;
    Population osaka;

    tokyo = 14000000;
    osaka = 8800000;

    std::cout << "東京都の人口: " << tokyo << std::endl;
    std::cout << "大阪府の人口: " << osaka << std::endl;
    
    return 0;
}

コードの解説

typedef unsigned long Population;

この一行により、コンパイラは Population という名前を unsigned long全く同じものとして認識するようになります。Population は、unsigned long の単なる別名(エイリアス)です。

Population tokyo;

typedef で定義した新しい型名 Population を使って、変数を宣言しています。これは、コンパイラにとっては unsigned long tokyo; と書かれたのと等価です。


typedef を使うメリット

  • コードの可読性向上: unsigned long population; と書くよりも Population population; と書いた方が、「この変数は人口を格納するためのものだ」という意図が明確になり、コードが格段に読みやすくなります。
  • 移植性の向上: もし、将来的にプログラムを別の環境に移植する際に、人口を unsigned long long で扱わなければならなくなったとしても、変更箇所は typedef一行だけで済みます。
  • 複雑な型の単純化: struct や関数ポインタなど、複雑な型宣言を、分かりやすい一つの名前に置き換えることができます。

C++11以降の using

C++11以降では、typedef と同じ目的で、より直感的で高機能な using を使ったエイリアス宣言も導入されています。

// typedef と同じ意味
using Population = unsigned long;

新しいC++のコードでは、typedef よりも using の方が好まれる傾向にあります。


まとめ

今回は、typedef を使って既存のデータ型に分かりやすい別名を付ける方法を解説しました。

  • typedef 既存の型 新しい型名; という構文で定義する。
  • コードの可読性保守性を向上させる効果がある。

typedef は、単にタイピングの手間を省くだけでなく、プログラムの「意味」をより明確にするための重要なツールです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次