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フィードバックを取得できます。ローカル設定は不要です。