カテゴリ: C言語 更新日: 2025/12/22

C言語の定数定義を完全解説!初心者でもわかるconstと#defineの違い

C言語の定数定義(const, #define)の違いを徹底比較
C言語の定数定義(const, #define)の違いを徹底比較

先生と生徒の会話形式で理解しよう

生徒

「C言語で数字や文字を何度も使いたいときに、毎回同じ数値を書くのは大変ですよね?」

先生

「その通りです。そんなときに便利なのが定数です。決まった値に名前を付けることで、後から読みやすくなり、間違いも少なくなります。」

生徒

「C言語では定数ってどんなふうに書くんですか?」

先生

「C言語ではconst#defineという二つの方法があります。すこしややこしく感じるかもしれませんが、ゆっくり解説します。」

1. C言語における定数とは?

1. C言語における定数とは?
1. C言語における定数とは?

C言語の定数とは、プログラムの実行中に値を変更できない決まった値のことを指します。 見た目は変数に似ていますが、「途中で書き換えない」というルールがある点が大きな特徴です。 たとえば円周率や税率、人数の上限、ゲームの最大スコアなど、常に同じ意味で使いたい数値に名前を付けることで、 ソースコードの意味が分かりやすくなります。 数字だけが並んだコードよりも意図が伝わりやすくなり、後から見直したときにも理解しやすくなります。

プログラミング初心者にとっても、定数を使うことで「この値は変えてはいけない」というルールを コード上ではっきり示せるため、ミスを防ぐ助けになります。 小さなプログラムでも定数を意識して使う習慣を付けると、読みやすく整理されたコードを書けるようになります。


#include <stdio.h>

int main(void)
{
    const int LIMIT = 3;
    printf("回数の上限は%dです。\n", LIMIT);
    return 0;
}

このサンプルでは、LIMITという定数を使って回数の上限を表しています。 数字を直接書く代わりに名前を付けることで、「何を表す数値なのか」が一目で分かります。 このように定数は、プログラムの意味を伝えやすくするための大切な考え方です。

2. constで定数を作る方法

2. constで定数を作る方法
2. constで定数を作る方法

constは、変数に「この値は変更しない」という意味を付けて、定数として扱う書き方です。 最大のポイントは、型があることです。整数ならint、少数ならdouble、文字ならcharのように、 データの種類がはっきりするため、C言語の基本である「型」を意識しながら安全に書けます。 プログラムの途中で値を変えてしまうミスを防ぎやすく、初心者でも読みやすいコードになりやすいのが特徴です。


#include <stdio.h>

int main(void)
{
    const int TAX = 10;
    printf("税率は%dパーセントです。\n", TAX);
    return 0;
}

この例ではTAXが定数なので、あとから別の値を代入しようとするとコンパイルで指摘されます。 つまり、実行してから気づくのではなく、作っている途中で間違いに気づけるのが安心です。 「税率のように変わらない値」「上限や固定の数値」をconstで表すと、数字だけが並ぶより意味が伝わります。


#include <stdio.h>

int main(void)
{
    const int LIMIT = 3;
    int count = 1;

    printf("上限は%d回です。\n", LIMIT);
    while(count <= LIMIT)
    {
        printf("%d回目の表示です。\n", count);
        count++;
    }
    return 0;
}

こちらは未経験者でもイメージしやすいように、「表示回数の上限」を定数で決めた例です。 LIMITが定数なので、「上限は変えない」という意図がはっきりします。 数値を直接書くよりも読みやすく、後から上限を変えたいときも一か所を見るだけで済むため、整理されたC言語の書き方につながります。

3. #defineで定数を作る方法

3. #defineで定数を作る方法
3. #defineで定数を作る方法

#defineは、C言語のプリプロセッサ命令を使って「名前」と「値」を結び付ける方法です。 ここで大事なのは、#defineは変数の宣言ではなく、コンパイル前に文字を置き換える仕組みだという点です。 そのため、プログラムの中に同じ数値や文字列が何度も登場するときに、ひとつの名前にまとめておくと読みやすくなります。 「決まった値を毎回書くのが面倒」「値の意味を分かりやすくしたい」という場面でよく使われます。


#include <stdio.h>

#define PI 3.14

int main(void)
{
    printf("円周率は%fです。\n", PI);
    return 0;
}

この例では、ソースコード中のPI3.14に置き換えられてからコンパイルされます。 つまり、実行時にPIという入れ物があるわけではなく、「文字として差し替えられる」と考えるとイメージしやすいです。 その分、#defineには型の指定がなく、整数・小数・文字列なども自由に書けます。 ただし自由度が高いぶん、書き間違えても気づきにくいことがあるので、初心者は意味が伝わる名前を付けることが大切です。


#include <stdio.h>

#define GREETING "こんにちは"
#define TIMES 2

int main(void)
{
    printf("%s\n", GREETING);
    printf("表示回数は%d回です。\n", TIMES);
    return 0;
}

このサンプルのように、#defineは文字列にも使えます。 何度も出てくる言葉や固定の回数を名前で表せるので、コードの意図が読み取りやすくなります。 一方で#defineは単純な置き換えのため、値の種類を間違えても型のチェックが働きにくいことがあります。 そのため、「決まった値に名前を付けて読みやすくする」という目的を意識して使うと、C言語の定数定義として扱いやすくなります。

4. constと#defineを徹底比較

4. constと#defineを徹底比較
4. constと#defineを徹底比較

どちらも定数を作る方法ですが、それぞれ特徴が違います。初心者向けにわかりやすく比較します。

  • 型があるかどうか:constは型があり、defineは型がありません。
  • エラーチェック:constはコンパイラがチェックするので安全です。
  • デバッグしやすさ:constは変数扱いのため、エラー箇所を見つけやすいです。
  • 書き換え防止:どちらも値は変わりませんが、constはコードの意図が伝わりやすいです。

たとえば数字のように単純な値を使うだけなら#defineでもいいですが、型がはっきりしたほうが安全なのでconstを使う場面が増えています。特に大きなプログラムや他の人と協力して開発する場合、constのほうが読みやすいことが多いです。セキュリティやバグ防止の観点でもconstが選ばれることが多く、プロの現場でも推奨されることがあります。

5. constと#defineのサンプル比較

5. constと#defineのサンプル比較
5. constと#defineのサンプル比較

二つの書き方をまとめたサンプルを見てみましょう。


#include <stdio.h>

#define MAX 100
const int MIN = 0;

int main(void)
{
    printf("最大値は%dです。\n", MAX);
    printf("最小値は%dです。\n", MIN);
    return 0;
}

最大値は100です。
最小値は0です。

初心者が混乱しやすいポイントとして、defineは型が無いという点があります。文字列や複雑な数式も置き換えできますが、意図しない挙動が起こることもあります。そのため基本的なC言語学習では、まずconstを使う練習から始めると理解が深まります。

6. 実際の開発現場ではどちらが使われる?

6. 実際の開発現場ではどちらが使われる?
6. 実際の開発現場ではどちらが使われる?

現代のC言語では、定数定義にはconstを使う文化が広がっています。ツールやコンパイラによるチェックが強化され、エラーや警告に気づけるのが大きな理由です。もちろんdefineも便利で、特にヘッダファイルで共通値を扱うときに使われることがあります。しかし初心者が安全にプログラムを書くなら、まずconstを覚えるほうが良いでしょう。プログラミング学習の中で、定数を使う癖がつくと、後からコードを読んだときに理解しやすくなります。

カテゴリの一覧へ
新着記事
New1
C++
C++の変数のスコープと有効範囲を完全解説!初心者でもわかる基本と考え方
New2
C++
C++とは?歴史と特徴を初心者向けに解説!Rustとの違いとモダン言語比較
New3
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド
New4
Rust
Rust開発環境をLinuxで構築する方法とおすすめ設定を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.2
Java&Spring記事人気No2
C言語
C言語の関数定義と呼び出しを完全ガイド!初心者でも分かる基本の書き方
No.3
Java&Spring記事人気No3
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.4
Java&Spring記事人気No4
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作
No.5
Java&Spring記事人気No5
C言語
Makefile入門:C言語プロジェクトを自動ビルドしよう!初心者でも分かる仕組みと使い方
No.6
Java&Spring記事人気No6
C言語
C言語の開発環境をWindowsに構築する方法【Visual Studio編】
No.7
Java&Spring記事人気No7
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.8
Java&Spring記事人気No8
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド