C言語入門|C言語の定数を理解しよう:const と enum を使った安全な値の扱い方

プログラムを書くとき、
「この値は絶対に途中で変わってほしくない!」
と思うことってありますよね😊

たとえば…

  • 円周率 3.14
  • 税率 10%
  • 曜日の番号
  • メニューの選択肢番号
  • ゲームの「大吉 / 中吉 / 吉 / 凶」などの固定値

こうした値が書き換えられると、プログラムが暴走したり結果がめちゃくちゃになったりしてしまいます💦

そこで活躍するのが const(定数)enum(列挙定数)
どちらも「変えてはいけない値」を安全に扱うための強力な仕組みです。

ここでは、実用例と図を交えながら、ふんわり楽しく解説していきます✨

🔁 変数は何度でも上書きできる → だから危険なことも!

まず、変数の性質を確認しておきましょう👇

int number = 7;
number = 16;   // 上書きできる

変数は自由に書き換えられます。
これは便利ですが、書き換えてはいけない場面ではとっても危険…!

⚠️ 書き換えてはいけない値を誤って変更してしまう例

次のプログラムでは、円周率を入れた変数 pi を誤って上書きしてしまっています。

プロジェクト名:2-10-1 ソースファイル名: sample2-10-1.c

#include <stdio.h>

int main(void)
{
    double pi = 3.14;  // 本来変えちゃダメな値
    int r = 5;

    printf("面積は %.1f\n", r * r * pi);

    pi = 10;   // ← 本当は r を変更したかった…誤代入!
    printf("面積は %.1f\n", r * r * pi);

    return 0;
}

こうしたバグは実務でも “よくある事故” で、
「本当は半径を変更したかったのに、定数を変更してしまった」というミスは重大なトラブルを招くことがあります😰

🛡️ const を使って安全に値を守ろう!

そこで使うのが const(定数化) です。

✔ const にすると、値を書き換えようとした瞬間にコンパイルエラー!

→ プログラマのミスを未然に防げる✨

📘 書式

const 型 定数名 = 初期値;

慣習として すべて大文字の名前 にすることが多いです。

📌 const を使って安全なプログラムに書き換える

プロジェクト名:2-10-2 ソースファイル名: sample2-10-2.c

#include <stdio.h>

int main(void)
{
    const double PI = 3.14;  // 書き換え禁止!安全!
    int r = 5;

    printf("面積は %.1f\n", r * r * PI);

    PI = 10;   // ← コンパイルエラー!バグを未然に防ぐ
    return 0;
}

書き換えようとするとエラーになるので、プログラムの品質も安全性もグッと向上します😊

🎨 変数と定数の違い

名前値を変更できる?使いどころ
変数 (int x 等)できる計算結果・入力値など、変わるデータ
定数 (const int X 等)できない円周率・税率・固定メニュー番号など

🎯 const のポイントまとめ

  • 「書き換え禁止」の変数にする。
  • 初期化が必須
  • 上書きしようとするとコンパイルエラー
  • バグを未然に防げて安全度アップ✨

🌈 enum(列挙定数)で「まとめて・わかりやすく」定数を扱う

定数が1つや2つなら const で十分ですが、
「たくさんの固定値を扱いたい」
という場面では enum(列挙体) が大活躍します。

🍀 enum の基本書式

enum { 定数名1, 定数名2, 定数名3 };

定義された定数には、左から

0, 1, 2 ...

と自動で番号が付きます。

🧧 例:おみくじを enum で表す

enum { DAIKICHI, CHUKICHI, KICHI, KYO };

割り当てられる値は次のとおり👇

名前自動で入る値
DAIKICHI0
CHUKICHI1
KICHI2
KYO3

とてもシンプルでわかりやすいです😊

🎮 任意の値を割り当てたいとき

enum { RED = 1, GREEN = 2, BLUE = 4 };

このように自由な値を割り当てることもできます。

📚 enum のメリットまとめ

メリット内容
まとめて定義できるコードがスッキリ
名前で扱える数字だけより圧倒的に読みやすい
自動で番号が振られる整数の管理が楽
const のように変更不可安全性が高い

💡 実務でも enum はめちゃくちゃ使われる!

  • メニュー番号
  • エラーコード
  • ゲームの状態
  • モード選択
  • 種別識別子

など、用途は本当に幅広いです😊