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