0Pricing
C Academy · レッスン

enumの値と範囲

基底となる整数を制御します。

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

値を明示的に指定する

デフォルトの 0、1、2 という並びに限定されるわけではありません。= を使って、名前に任意の整数を割り当てられます。

HTTP ステータスコードのように、数値を外部システムと一致させる必要がある場合に便利です。

enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };

独自の値を出力する

値を割り当てると、その正確な数値が格納され、出力されます。

ここでは enum の名前が標準 HTTP コードに直接対応しています。

#include <stdio.h>
enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };
int main(void) {
    printf("%d %d\n", OK, NOT_FOUND);
    return 0;
}

明示的な値とデフォルト値を混在させる

一部の値を設定し、他を空欄にすると、空欄の名前は直前の値から数え続けます。

したがって = 10 の直後の名前は 11、その次は 12 になります。

#include <stdio.h>
enum N { A = 10, B, C, D = 100, E };
int main(void) {
    printf("%d %d %d %d %d\n", A, B, C, D, E);
    return 0;
}

1 から始める

よく使われる方法として、最初の値を 0 ではなく 1 にして、人間の数え方に合わせることがあります。

ここでは MON が 1 なので、曜日は 1 から 7 までになります。

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

重複した値も使用できる

2つの enum 名に同じ整数値を割り当てることができます。C は値の一意性を要求しません。

これは、同じ概念に別名を付けるために使われることがあります。

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

負の値

enum の値には負の数も指定できます。enum の値は符号付き整数です。

これにより、0 未満のエラーコードを、0 や正の値の範囲とともに表現できます。

#include <stdio.h>
enum Temp { COLD = -1, NORMAL = 0, HOT = 1 };
int main(void) {
    printf("%d %d %d\n", COLD, NORMAL, HOT);
    return 0;
}

COUNT センチネルのテクニック

0 から項目を並べ、最後に名前を1つ追加すると、その最後の名前は項目数と同じ値になります。

この COUNT のテクニックを使えば、項目を追加した後でもサイズが自動的に更新されます。

#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
    printf("%d fruits\n", FRUIT_COUNT);
    return 0;
}

配列のインデックスとして enum を使う

enum の値は整数なので、配列のインデックスとして最適です。

COUNT のテクニックと組み合わせれば、配列を正確なサイズで確保し、読みやすい名前でインデックス指定できます。

#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
    int stock[FRUIT_COUNT] = {5, 3, 8};
    printf("%d\n", stock[PEAR]);
    return 0;
}

基になる型

標準 C では、enum の値はコンパイラが選択した整数型に格納され、通常は int になります。

その型は定義したすべての値を格納できる幅を持つため、大きな定数や負の定数も収まります。

#include <stdio.h>
enum Big { SMALL = 0, LARGE = 1000000 };
int main(void) {
    printf("%d\n", LARGE);
    return 0;
}

組み込みの範囲チェックはない

C は、enum 変数にリスト外の値を代入しても止めてくれません。

次の代入はコンパイルも実行もできます。値を正しく保つ責任はプログラマーにあります。

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

範囲をループする

enum が 0 から COUNT センチネルまで並んでいる場合、単純な for で全値をループできます。

これは、COUNT 未満の各定義済み項目を順番に処理します。

#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
    for (int f = APPLE; f < FRUIT_COUNT; f++)
        printf("%d ", f);
    printf("\n");
    return 0;
}

理解度チェック

混在した enum の値について考えてみてください。

まとめ

enum の値は明示的に指定でき、デフォルト値と混在させたり、同じ値を繰り返したり、負の値を使ったりできます。

COUNT センチネルのテクニックでリストのサイズを自動的に追跡でき、enum は配列のインデックスとしても便利です。C には範囲チェックがないため、値は自分で検証してください。

よくある質問

「enumの値と範囲」レッスンは無料ですか?

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

「enumの値と範囲」で何を学びますか?

基底となる整数を制御します。 ブラウザで直接実行するハンズオンコードでC Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「enumの値と範囲」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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