C の列挙型は列挙型とも呼ばれます。これは整数値で構成されるユーザー定義のデータ型であり、これらの値に意味のある名前が付けられます。 C で enum を使用すると、プログラムの理解と保守が容易になります。 enum は enum キーワードを使用して定義されます。
C で列挙型を定義する方法は次のとおりです。
enum flag{integer_const1, integer_const2,.....integter_constN};
上記の宣言では、「N」個の整数定数を含むフラグという名前の列挙型を定義します。 integer_const1 のデフォルト値は 0、integer_const2 は 1 などです。宣言時に整数定数のデフォルト値を変更することもできます。
例えば:
enum fruits{mango, apple, strawberry, papaya};
マンゴーのデフォルト値は 0、リンゴは 1、イチゴは 2、パパイヤは 3 です。これらのデフォルト値を変更したい場合は、以下のように実行できます。
enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, };
列挙型宣言
ご存知のとおり、C 言語では、int、float、char などの事前定義された型の変数を宣言する必要があります。同様に、enum などのユーザー定義のデータ型の変数を宣言できます。 enum 型の変数を宣言する方法を見てみましょう。
以下に示すように、ステータス型の列挙型を作成するとします。
enum status{false,true};
次に、ステータス タイプの変数を作成します。
enum status s; // creating a variable of the status type.
上記のステートメントでは、ステータス型の 's' 変数を宣言しました。
変数を作成するには、上記の 2 つのステートメントを次のように記述できます。
enum status{false,true} s;
この場合、デフォルト値 false は 0 に等しく、true の値は 1 に等しくなります。
enumの簡単なプログラムを作成してみましょう。
#include enum weekdays{Sunday=1, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; int main() { enum weekdays w; // variable declaration of weekdays type w=Monday; // assigning value of Monday to w. printf('The value of w is %d',w); return 0; }
上記のコードでは、weekday という名前の列挙型を作成し、7 日すべての名前が含まれています。日曜日に 1 つの値を割り当て、他のすべての名前には前の値に 1 を加えた値が与えられます。
出力
enum をより明確に理解するために別の例を示します。
#include enum months{jan=1, feb, march, april, may, june, july, august, september, october, november, december}; int main() { // printing the values of months for(int i=jan;i<=december;i++) { printf('%d, ',i); } return 0; < pre> <p>In the above code, we have created a type of enum named as months which consists of all the names of months. We have assigned a '1' value, and all the other months will be given a value as the previous one plus one. Inside the main() method, we have defined a for loop in which we initialize the 'i' variable by jan, and this loop will iterate till December.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-2.webp" alt="Enum in C"> <h3>Why do we use enum?</h3> <p>The enum is used when we want our variable to have only a set of values. For example, we create a direction variable. As we know that four directions exist (North, South, East, West), so this direction variable will have four possible values. But the variable can hold only one value at a time. If we try to provide some different value to this variable, then it will throw the compilation error.</p> <p>The enum is also used in a switch case statement in which we pass the enum variable in a switch parenthesis. It ensures that the value of the case block should be defined in an enum.</p> <p> <strong>Let's see how we can use an enum in a switch case statement.</strong> </p> <pre> #include enum days{sunday=1, monday, tuesday, wednesday, thursday, friday, saturday}; int main() { enum days d; d=monday; switch(d) { case sunday: printf('Today is sunday'); break; case monday: printf('Today is monday'); break; case tuesday: printf('Today is tuesday'); break; case wednesday: printf('Today is wednesday'); break; case thursday: printf('Today is thursday'); break; case friday: printf('Today is friday'); break; case saturday: printf('Today is saturday'); break; } return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-3.webp" alt="Enum in C"> <p> <strong>Some important points related to enum</strong> </p> <ul> <li>The enum names available in an enum type can have the same value. Let's look at the example.</li> </ul> <pre> #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf('The value of mango is %d', mango); printf(' The value of apple is %d', apple); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-4.webp" alt="Enum in C"> <ul> <li>If we do not provide any value to the enum names, then the compiler will automatically assign the default values to the enum names starting from 0.</li> <li>We can also provide the values to the enum name in any order, and the unassigned names will get the default value as the previous one plus one.</li> <li>The values assigned to the enum names must be integral constant, i.e., it should not be of other types such string, float, etc.</li> <li>All the enum names must be unique in their scope, i.e., if we define two enum having same scope, then these two enums should have different enum names otherwise compiler will throw an error.</li> </ul> <p> <strong>Let's understand this scenario through an example.</strong> </p> <pre> #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', success); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-5.webp" alt="Enum in C"> <ul> <li>In enumeration, we can define an enumerated data type without the name also.</li> </ul> <pre> #include enum {success, fail} status; int main(void) { status=success; printf('The value of status is %d', status); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-6.webp" alt="Enum in C"> <h3>Enum vs. Macro in C</h3> <ul> <li>Macro can also be used to define the name constants, but in case of an enum, all the name constants can be grouped together in a single statement. <br> For example, <br> # define pass 0; <br> # define success 1; <br> The above two statements can be written in a single statement by using the enum type. <br> enum status{pass, success};</li> <li>The enum type follows the scope rules while macro does not follow the scope rules.</li> <li>In Enum, if we do not assign the values to the enum names, then the compiler will automatically assign the default value to the enum names. But, in the case of macro, the values need to be explicitly assigned.</li> <li>The type of enum in C is an integer, but the type of macro can be of any type.</li> </ul> <hr></=december;i++)>
出力
enum に関連するいくつかの重要なポイント
- enum 型で使用できる enum 名は同じ値を持つことができます。例を見てみましょう。
#include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf('The value of mango is %d', mango); printf(' The value of apple is %d', apple); return 0; }
出力
- enum 名に値を指定しない場合、コンパイラは自動的に 0 から始まるデフォルト値を enum 名に割り当てます。
- また、列挙名に値を任意の順序で指定することもでき、割り当てられていない名前には、前の値に 1 を加えたデフォルト値が取得されます。
- enum 名に割り当てられる値は整数定数である必要があります。つまり、文字列、浮動小数点などの他の型であってはなりません。
- すべての列挙型名はスコープ内で一意である必要があります。つまり、同じスコープを持つ 2 つの列挙型を定義する場合、これら 2 つの列挙型は異なる列挙型名を持つ必要があり、そうでない場合はコンパイラがエラーをスローします。
例を通してこのシナリオを理解しましょう。
#include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', success); return 0; }
出力
- 列挙では、名前を付けずに列挙データ型を定義することもできます。
#include enum {success, fail} status; int main(void) { status=success; printf('The value of status is %d', status); return 0; }
出力
C における Enum とマクロ
- マクロを使用して名前定数を定義することもできますが、列挙型の場合、すべての名前定数を 1 つのステートメントにグループ化できます。
例えば、
# パス 0 を定義します。
# 成功 1 を定義します。
上記 2 つのステートメントは、enum 型を使用することで 1 つのステートメントで記述することができます。
列挙ステータス{パス、成功}; - enum 型はスコープ ルールに従いますが、マクロはスコープ ルールに従いません。
- Enum では、列挙名に値を割り当てない場合、コンパイラは自動的にデフォルト値を列挙名に割り当てます。ただし、マクロの場合は、値を明示的に割り当てる必要があります。
- C の enum の型は整数ですが、マクロの型は任意の型にすることができます。
=december;i++)>