
C言語入門|typedef による構造体型の別名化と活用技法
あっ……またやっちゃった 😵
struct を付け忘れてコンパイルエラー!
C言語で構造体を使い始めると、誰もが一度はこの壁にぶつかります。
Employee taro; // エラー!struct を付け忘れた「毎回 struct を書くの、正直めんどくさい……」
そんなモヤモヤを一気に解消してくれるのが、typedef です ✨
ここでは、
- typedef とは何か
- 構造体に別名を付ける理由
- typedef と構造体を同時に定義する実践パターン
- 列挙型との組み合わせ
を、やさしく順番に解説していきます。

構造体型の正体をおさらい
まず、ここをしっかり押さえておきましょう。
struct PERSON {
char name[20];
int age;
};この宣言で使える型の正式名称は、
実際の型名
struct PERSON
つまり、
struct PERSON taro;と書かないといけないわけです。
構造体をたくさん使うようになると、
struct の付け忘れ → コンパイルエラー
が頻発するようになります 😅
typedef とは何をする命令?
そこで登場するのが typedef 宣言 です。
typedef の基本構文
typedef 型名 別名;これは、
既存の型に、新しい名前(別名)を付ける
ための命令です。
例:基本的な typedef
typedef int Integer;これ以降は、
Integer x = 10;と書いても、int とまったく同じ意味になります。
構造体型に別名を付ける
では、本題です 😊
構造体型にも typedef を使うと、どうなるでしょう?
ありがちなミス
struct EMPLOYEE {
char name[20];
int salary;
};
EMPLOYEE hanako; // エラー(struct を忘れている)typedef を使った解決策
typedef struct EMPLOYEE Employee;これで、
Employee hanako;と書けるようになります 🎉
| 書き方 | 意味 |
|---|---|
| struct EMPLOYEE | 元の型 |
| Employee | その別名 |
struct を省略できるだけで、コードが一気に読みやすくなります。
typedef は構造体と相性バツグン
実務では、
構造体 + typedef
はほぼセットで使われます。
理由はシンプル。
- 型名が短くなる。
- 可読性が上がる。
- ミスが減る。
「構造体は typedef 前提」
くらいの感覚でOKです 😊
構造体定義と typedef を同時に行う
さらに便利なのが、
構造体の定義と typedef を一度に書く方法です。
構文
typedef struct {
型 メンバ名;
型 メンバ名;
} 構造体型名;この書き方を覚えてしまえば、
「struct タグ名」を使う古い書き方は、ほぼ出番がなくなります。
別の構造体例で実践してみよう
今回は「商品(Product)」を表す構造体にしてみます。
typedef struct {
char name[30];
int price;
int stock;
} Product;これで、
Product apple = {"りんご", 120, 50};のように、
struct を一切書かずに構造体変数を扱えるようになります 👍
完成したサンプルプログラム
サンプルは、商品情報を表示するプログラムに置き換えています。
プロジェクト名:6-4-1 ソースファイル名: sample6-4-1.c
#include <stdio.h>
typedef char String[1024];
int main(void)
{
typedef struct {
String name;
int price;
int stock;
} Product;
Product bread = {"食パン", 180, 20};
Product milk = {"牛乳", 150, 10};
Product cheese = {"チーズ", 320, 5};
const String TEMPLATE = "%s 価格=%3d円 在庫=%2d個\n";
printf(TEMPLATE, bread.name, bread.price, bread.stock);
printf(TEMPLATE, milk.name, milk.price, milk.stock);
printf(TEMPLATE, cheese.name, cheese.price, cheese.stock);
return 0;
}このコードのポイント
| ポイント | 内容 |
|---|---|
| typedef struct | 構造体と別名を同時定義 |
| Product | 構造体型として直感的 |
| 初期化 | 構造体初期化と相性抜群 |
とてもスッキリしていますよね 😊
typedef は構造体以外にも使える
typedef は、構造体専用ではありません。
| 元の型 | typedef の例 |
|---|---|
| int | typedef int Count; |
| char 配列 | typedef char String[256]; |
| enum | typedef enum {...} Type; |
特に String のような配列型の別名は、
可読性アップにかなり効果的です。
列挙型(enum)と typedef
列挙型も、typedef と相性がいいです。
typedef enum {
RED,
YELLOW,
GREEN
} Signal;これで、
Signal s = RED;注意点 ⚠️
C言語の enum は、
実体は int 型の別名です。
| 特徴 | 内容 |
|---|---|
| 型安全 | 完全ではない。 |
| コンパイル | enum 以外の値も通る。 |
| メリット | 意味が明確になる。 |
それでも、
「ただの int より、意図が伝わる」
という点で、enum + typedef は非常に有用です 😊
typedef を使いこなすコツ
最後に、実践的な指針をまとめておきます。
- 構造体は typedef 前提で設計する。
- struct タグ名は原則使わない。
- 型名は「意味が分かる名前」にする。
- enum も typedef でラップする。
typedef は、
コードを「人間にやさしくする」ための道具です。
使えば使うほど、
「読めるCコード」になっていきますよ 😊
ここまで来れば、
構造体 × typedef はもう完全に武器です 💪
次は、
- 構造体配列
- 構造体を関数に渡す
- 構造体ポインタ
といった、さらに実戦的な世界へ進めますよ 😊
