【C言語入門】列挙型(enum)の使い方

enumって使ってますか?

enumは列挙型といって、複数の変数に一連の整数値を付ける必要がある場合に使用すると便利です。例えばswitch-case文のcaseの値などに使用すると便利です。

この記事では、enumについて

  • 列挙型(enum)とは
  • enumの使い方
  • switch文でenumを使う方法

というように、基本的な内容から具体的な使い方の内容についても解説していきます。今回はenumについて、使い方をわかりやすく解説します!

列挙型(enum)とは

列挙型は、複数の変数に一連の整数値を付けると便利な場合に使用します。

列挙型で定義される変数はメンバと言います。デフォルトでは定義されたメンバの順に0(ゼロ)から整数値が付けられます。最初の値を0(ゼロ)以外で定義することも可能です。

また途中のメンバから付けられる整数値を変えることもできます。

enumの使い方

それではenumの使い方について解説していきます。

基本的な使い方

enumは下記のように定義します。

enumの定義:

enum タグ名 {メンバ[0], メンバ[1], メンバ[2], ・・・};

定義したenumは下記のように宣言して使用します。

enumの宣言:

enum タグ名 オブジェクト名;
オブジェクト名 = メンバ名;

それではサンプルコードで確認していきましょう。

#include <stdio.h>
 
// enum型の定義
enum week {
  Mon,
  Tue,
  Wed,
  Thu,
  Fri,
  Sat,
  Sun
};
 
int main(void) {
    // enum型の宣言
    enum week wk0, wk1, wk2;
    
    // enum型のメンバを代入
    wk0 = Mon;
    wk1 = Tue;
    wk2 = Wed;
    
    printf("Monの値は: %d\n", wk0);
    printf("Tueの値は: %d\n", wk1);
    printf("Wedの値は: %d\n", wk2);
    
    return 0;
}

実行結果:

Monの値は: 0
Tueの値は: 1
Wedの値は: 2

このサンプルコードでは、enum型「week」を定義しています。

そしてenum型「week」のオブジェクト「wk0」、「wk1」、「wk2」を宣言しています。「wk0」にはメンバ「Mon」を、「wk1」にはメンバ「Tue」を、「wk2」にはメンバ「Wed」を代入し、それぞれのオブジェクトの値を出力表示しています。

出力表示された結果を確認すると定義したメンバの順に0(ゼロ)から整数値が付けられているのがわかります。

typedefを使って定義、宣言する方法

enumもstructと同じようにtypedef句を使って定義、宣言することができます。

typedefを使ったenumの定義:

typedef enum タグ名 {メンバ[0], メンバ[1], メンバ[2], ・・・} 型名;

タグ名の記述は省略することもできます。typedefを使って定義したenumは下記のように宣言して使用します。

typedefを使った場合のenumの宣言:

型名 オブジェクト名;
オブジェクト名 = メンバ名;

それではサンプルコードで確認していきましょう。

#include <stdio.h>
 
// week型の定義
typedef enum enm {
  Mon,
  Tue,
  Wed,
  Thu,
  Fri,
  Sat,
  Sun
} week;
 
int main(void) {
    // week型の宣言
    week wk0, wk1, wk2;
    
    // week型のメンバを代入
    wk0 = Mon;
    wk1 = Tue;
    wk2 = Wed;
    
    printf("Monの値は: %d\n", wk0);
    printf("Tueの値は: %d\n", wk1);
    printf("Wedの値は: %d\n", wk2);
    
    return 0;
}

実行結果:

Monの値は: 0
Tueの値は: 1
Wedの値は: 2

このサンプルコードでは、typedef句を使ってenumのweek型を定義しています。

そしてweek型のオブジェクト「wk0」、「wk1」、「wk2」を宣言しています。「wk0」にはメンバ「Mon」を、「wk1」にはメンバ「Tue」を、「wk2」にはメンバ「Wed」を代入し、それぞれのオブジェクトの値を出力表示しています。

初期化する方法

これまではメンバを定義した順に0(ゼロ)から整数値が付けられていました。

最初のメンバに付ける整数値を定義することができます。また途中のメンバから付ける整数値を定義することもできます。

メンバに付ける整数値を定義する方法は下記のとおりです。

メンバに付ける整数値の定義:

enum タグ名 {メンバ[0], メンバ[1] = 整数値, メンバ[2], ・・・};

それではサンプルコードで確認していきましょう。

#include <stdio.h>
 
// enum型の定義
enum week {
  Mon = 1,
  Tue,
  Wed,
  Thu,
  Fri,
  Sat = 11,
  Sun
};
 
int main(void) {
    // enum型の宣言
    enum week wk1, wk2, wk3, wk11, wk12;
    
    // enum型のメンバを代入
    wk1 = Mon;
    wk2 = Tue;
    wk3 = Wed;
    wk11 = Sat;
    wk12 = Sun;
    
    printf("Monの値は: %d\n", wk1);
    printf("Tueの値は: %d\n", wk2);
    printf("Wedの値は: %d\n", wk3);
    printf("Satの値は: %d\n", wk11);
    printf("Sunの値は: %d\n", wk12);
    
    return 0;
}

実行結果:

Monの値は: 1
Tueの値は: 2
Wedの値は: 3
Satの値は: 11
Sunの値は: 12

このサンプルコードでは、enum型「week」を定義しています。

enum型「week」の最初のメンバ「Mon」に付ける整数値を1に定義しています。また、途中のメンバ「Sat」に付ける整数値を11に定義しています。

そしてenum型「week」のオブジェクト「wk1」、「wk2」、「wk3」、「wk11」、「wk12」を宣言しています。

「wk1」にはメンバ「Mon」を、「wk2」にはメンバ「Tue」を、「wk3」にはメンバ「Wed」を、「wk11」にはメンバ「Sat」を、「wk12」にはメンバ「Sun」を代入し、それぞれのオブジェクトの値を出力表示しています。

出力表示された結果を確認すると整数値1を定義したメンバから順に整数値が付けられているのがわかります。また、途中で整数値11を定義したメンバから順に整数値が付けられているのがわかります。

switch文でenumを使う方法

enumはswitch-case文とあわせてよく使われます。caseの値にenumのメンバを記述することで、場合分けの条件が読みやすくなるからです。

switch文でenumを使う方法についてはこちらで詳しく解説しているので参考にしてくださいね!

【C言語入門】switch-case文の使い方(数値、文字列で複数条件分岐)
更新日 : 2020年6月29日

まとめ

ここでは、enumの使い方について説明しました。enumはswitch-case文とあわせて使うとcaseの値にenumのメンバを記述することができて、場合分けの条件が読みやすくなるので便利です。

使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]