0Pricing
C Academy · レッスン

enumを定義する

読みやすい名前付きの値を作成します。

「enumを定義する」はCoddyKit上の無料C Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C Academyコースには全4レッスンが含まれています。

enum とは

列挙型(enum)は、名前付き整数定数の集合をまとめたユーザー定義型です。

0 が月曜日、1 が火曜日という対応を覚える代わりに、それらの数値に読みやすい名前を付けます。これにより、コードが明快になり、間違いも起こりにくくなります。

基本構文

enum は、enum キーワード、タグ名、そして中かっこで囲んだ名前のリストを使って宣言します。

各名前は定数になり、整数が必要な場所で使用できます。

enum Weekday { MON, TUE, WED, THU, FRI };

デフォルト値は 0 から始まる

デフォルトでは最初の名前が 0 になり、その後の名前は直前の値に 1 を加えたものになります。

したがって enum Weekday では、MON は 0、TUE は 1、WED は 2 となり、以降も同様です。

#include <stdio.h>
enum Weekday { MON, TUE, WED, THU, FRI };
int main(void) {
    printf("%d %d %d\n", MON, TUE, WED);
    return 0;
}

enum 変数を宣言する

enum 型を作成すると、その型の変数を宣言できます。

変数には、名前付きの値のいずれか1つが格納されます。内部的には単なる int です。

#include <stdio.h>
enum Weekday { MON, TUE, WED, THU, FRI };
int main(void) {
    enum Weekday today = WED;
    printf("today = %d\n", today);
    return 0;
}

enum で可読性が向上する理由

if (state == 2) と if (state == PAUSED) を比較してください。

後者はコード自体が意味を説明しています。enum を使えば、コンパイラに意味を追跡させながら、分かりにくい数値ではなく名前付きの値を読めます。

enum Status { RUNNING, PAUSED, STOPPED };

switch で enum を使う

enum は switch 文と自然に組み合わせられます。名前付きの各値が、明確な case ラベルになります。

これは enum の代表的な実用例の1つです。

#include <stdio.h>
enum Status { RUNNING, PAUSED, STOPPED };
int main(void) {
    enum Status s = PAUSED;
    switch (s) {
        case RUNNING: printf("running\n"); break;
        case PAUSED:  printf("paused\n");  break;
        case STOPPED: printf("stopped\n"); break;
    }
    return 0;
}

enum は単なる整数

enum 定数は整数と同じように扱えます。定数を使って算術演算や比較を行えます。

この柔軟性は便利ですが、その一方で C は範囲外の数値を格納しても止めてくれません。

#include <stdio.h>
enum Level { LOW, MID, HIGH };
int main(void) {
    enum Level next = LOW + 1;
    printf("%d\n", next);
    return 0;
}

匿名 enum

名前付きの型は必要なく定数だけが必要な場合は、タグ名を省略できます。

関連する整数定数のグループを手早く定義する方法です。

#include <stdio.h>
enum { RED, GREEN, BLUE };
int main(void) {
    printf("%d %d %d\n", RED, GREEN, BLUE);
    return 0;
}

命名規則

慣例として、enum 定数の名前はマクロと同じように UPPER_CASE で書きます。

これにより、その値が固定された定数であることを読み手に示せます。タグ名には CamelCase や PascalCase を使うことがよくあります。

enum TrafficLight { LIGHT_RED, LIGHT_YELLOW, LIGHT_GREEN };

typedef と組み合わせる

あちこちで enum Weekday と書くのは冗長です。typedef を使えば、短い名前を利用できます。

typedef の後は、enum キーワードなしで Weekday today; のように変数を宣言できます。

#include <stdio.h>
typedef enum { MON, TUE, WED } Weekday;
int main(void) {
    Weekday d = TUE;
    printf("%d\n", d);
    return 0;
}

enum 定数のスコープ

enum 定数の名前は、そのスコープ内で通常の識別子と同じ名前空間を共有します。

つまり、同じスコープにある2つの enum で、同じ定数名を再利用することはできません。衝突を避けるため、異なる名前を選んでください。

enum A { OPEN, CLOSED };
enum B { LOCKED, UNLOCKED };

理解度チェック

enum のデフォルト値について理解度を確認してください。

まとめ

enum は名前付き整数定数を定義します。最初の値は 0 で、特に指定しない限り、後続の名前は1ずつ大きくなります。

enum によってコードが読みやすくなり、switch と相性がよく、typedef で短くできます。次は、独自の値と範囲について学びます。

よくある質問

「enumを定義する」レッスンは無料ですか?

はい。「enumを定義する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C Academyコースには全4レッスンが含まれています。

「enumを定義する」で何を学びますか?

読みやすい名前付きの値を作成します。 ブラウザで直接実行するハンズオンコードでC Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「enumを定義する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC Academyレッスンでコードを書いて実行できますか?

はい。すべてのC Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. enumを定義する
  2. enumの値と範囲
  3. const変数
  4. #define定数
← C Academyに戻る