【C言語】enum型とint型を相互にキャストする方法

目次から探す

enum型からint型へのキャスト方法

enum型からint型への暗黙的なキャスト

enum型は、整数値に対応する定数を定義するためのデータ型です。

enum型の値は、デフォルトで整数型として扱われます。

そのため、enum型の値をint型に代入する場合、暗黙的なキャストが行われます。

以下は、enum型からint型への暗黙的なキャストの例です。

#include <stdio.h>
enum Weekday {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};
int main() {
    enum Weekday today = MONDAY;
    int day = today; // enum型からint型への暗黙的なキャスト
    printf("今日は%d曜日です。\n", day);
    return 0;
}

上記のコードでは、enum型のWeekdayを定義し、その中に曜日の定数を列挙しています。

main関数内で、todayという変数にMONDAYを代入し、dayというint型の変数にtodayを代入しています。

この代入は暗黙的なキャストによって行われます。

enum型からint型への明示的なキャスト

enum型からint型への明示的なキャストは、キャスト演算子を使用して行います。

キャスト演算子は、変数や式の前に(int)のように書きます。

以下は、enum型からint型への明示的なキャストの例です。

#include <stdio.h>
enum Month {
    JANUARY,
    FEBRUARY,
    MARCH,
    APRIL,
    MAY,
    JUNE,
    JULY,
    AUGUST,
    SEPTEMBER,
    OCTOBER,
    NOVEMBER,
    DECEMBER
};
int main() {
    enum Month currentMonth = MARCH;
    int month = (int)currentMonth; // enum型からint型への明示的なキャスト
    printf("現在の月は%d月です。\n", month);
    return 0;
}

上記のコードでは、enum型のMonthを定義し、その中に月の定数を列挙しています。

main関数内で、currentMonthという変数にMARCHを代入し、monthというint型の変数にcurrentMonthを明示的にキャストして代入しています。

int型からenum型へのキャスト方法

int型からenum型への暗黙的なキャスト

int型からenum型への暗黙的なキャストは、enum型の値の範囲内であれば自動的に行われます。

ただし、int型の値がenum型の定義された範囲外の場合、予期しない結果が生じる可能性があるため、注意が必要です。

以下は、int型からenum型への暗黙的なキャストの例です。

#include <stdio.h>
enum Color {
    RED,
    GREEN,
    BLUE
};
int main() {
    int colorCode = 1;
    enum Color color = colorCode; // int型からenum型への暗黙的なキャスト
    switch (color) {
        case RED:
            printf("赤色です。\n");
            break;
        case GREEN:
            printf("緑色です。\n");
            break;
        case BLUE:
            printf("青色です。\n");
            break;
        default:
            printf("無効な色です。\n");
            break;
    }
    return 0;
}

上記のコードでは、enum型のColorを定義し、その中に色の定数を列挙しています。

main関数内で、colorCodeというint型の変数に1を代入し、colorというenum型の変数にcolorCodeを暗黙的にキャストして代入しています。

int型からenum型への明示的なキャスト

int型からenum型への明示的なキャストは、キャスト演算子を使用して行います。

キャスト演算子は、変数や式の前に(enum Color)のように書きます。

以下は、int型からenum型への明示的なキャストの例です。

#include <stdio.h>
enum Status {
    SUCCESS,
    FAILURE
};
int main() {
    int statusCode = 1;
    enum Status status = (enum Status)statusCode; // int型からenum型への明示的なキャスト
    if (status == SUCCESS) {
        printf("処理が成功しました。\n");
    } else if (status == FAILURE) {
        printf("処理が失敗しました。\n");
    } else {
        printf("無効なステータスです。\n");
    }
    return 0;
}

上記のコードでは、enum型のStatusを定義し、その中にステータスの定数を列挙しています。

main関数内で、statusCodeというint型の変数に1を代入し、statusというenum型の変数にstatusCodeを明示的にキャストして代入しています。

以上が、C言語におけるenum型int型の相互キャストについての解説です。

enum型からint型へのキャストやint型からenum型へのキャストは、プログラムの柔軟性を高めるために役立つ機能ですが、注意が必要です。

適切なキャスト方法を選択し、予期しない結果が生じないようにすることが重要です。

目次から探す