カテゴリ: C言語 更新日: 2026/01/22

C言語のマクロ定数を完全ガイド!初心者でも分かる#defineの使い方

C言語のマクロ定数(#define)の基本と活用例
C言語のマクロ定数(#define)の基本と活用例

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

生徒

「C言語で値を変更できない定数を作りたいんですけど、どうすればいいですか?」

先生

「そんな時に使うのがマクロ定数と呼ばれる仕組みです。#defineという記述を使って名前に値を割り当てると、プログラムのどこでも同じ値で扱えるようになります。」

生徒

「変数とどう違うんですか?値を入れるなら変数でもよさそうに感じます。」

先生

「変数は後から値を代入し直せますが、マクロ定数は書き換えを防ぎたい時に使います。同じ数字を繰り返し書かずに済むので、プログラムの見通しが良くなり、変更にも強くなります。」

1. マクロ定数とは?

1. マクロ定数とは?
1. マクロ定数とは?

C言語には様々な定数がありますが、コードによく登場するのが#defineによるマクロ定数です。これはコンパイルの前に、プログラムの中に書かれた名前を決められた値に置き換える仕組みです。置き換える処理を「プリプロセッサ」と呼び、プログラムが機械語に変換されるより前の段階で処理されます。

例えば税率、ゲームの最大人数、画面サイズ、センサーの閾値など、後から値を変更したくなる部分をコード中でバラバラに数字として書いてしまうと、修正のたびにすべて探して変更しなければなりません。しかしマクロ定数なら、ひとつの場所を変更するだけで済むため、初心者でも安全に扱えます。

2. #defineの基本的な書き方

2. #defineの基本的な書き方
2. #defineの基本的な書き方

#defineの書き方はとてもシンプルです。


#define 税率 10

このように書くと、プログラム中にある「税率」という文字がすべて「10」に置き換えられます。数字以外にも文字や文字列を割り当てることもできます。


#define APP_NAME "SampleApp"
#define 初期値 0

日本語の名前も使えますが、環境によって文字化けする可能性があるため、慣れるまでは英字を使う方が安心です。

3. マクロ定数が役立つ理由

3. マクロ定数が役立つ理由
3. マクロ定数が役立つ理由

マクロ定数は、変更が必要になっても修正する箇所がひとつだけになるため、バグを防ぎやすくなります。さらに、意味のある名前をつけることでプログラムの読みやすさが大幅に向上します。例えば、ゲームで「HPがゼロ以下ならゲームオーバー」という処理を書くなら、数字を直接置くより意味が伝わります。


#define GAMEOVER_HP 0
if(player_hp <= GAMEOVER_HP)
{
    printf("ゲームオーバーです。\n");
}

数字だけが並ぶコードは読む人に優しくありません。値に名前を与えることで、プログラムが自然な文章のように見えるようになり、初心者でも理解しやすくなります。

4. よく使うマクロ定数の例

4. よく使うマクロ定数の例
4. よく使うマクロ定数の例

マクロ定数はたくさんの場面で利用できます。例えば次のようなケースです。

  • 配列のサイズを定義する
  • プログラム全体で同じ設定値を使う
  • メッセージを固定化する

#define SIZE 5
int data[SIZE] = {1,2,3,4,5};

値を書き換えたい時には、#define SIZE 10と変更すれば配列の大きさも自動的に変わります。同じ数字があちこちに書かれていると修正漏れの原因になるため、定数化はとても大切です。

5. プログラムを短く書く置換機能としても便利

5. プログラムを短く書く置換機能としても便利
5. プログラムを短く書く置換機能としても便利

マクロ定数は数字だけでなく、文字列や式をそのまま置き換えることもできます。例えば画面に表示するメッセージをまとめておくと、管理しやすくなります。


#define HELLO "こんにちは!\n"
#define BYE "さようなら!\n"
printf(HELLO);
printf(BYE);

もしメッセージを変更したい場合も、#defineの部分だけ書き換えればよく、プログラム全体を探す必要はありません。初心者が陥りやすい「値を探して修正する地獄」を避けられます。

6. 条件分岐と組み合わせたマクロの活用例

6. 条件分岐と組み合わせたマクロの活用例
6. 条件分岐と組み合わせたマクロの活用例

マクロ定数は、条件分岐と組み合わせることでより実践的になります。例えば、特定の温度を超えたら警告を出したい場合の例です。


#define LIMIT_TEMP 30
int temp = 28;
if(temp > LIMIT_TEMP)
{
    printf("温度が上昇しています。\n");
}
else
{
    printf("現在の温度は安全です。\n");
}

数字を直接書くより可読性が高く、意味が明確になります。

7. 実行結果の例

7. 実行結果の例
7. 実行結果の例

下記は、HELLOとBYEを使ったサンプルの実行結果です。


こんにちは!
さようなら!

8. マクロ定数を使うときに気を付けたいこと

8. マクロ定数を使うときに気を付けたいこと
8. マクロ定数を使うときに気を付けたいこと

便利なマクロ定数ですが、注意するべきポイントもあります。まず、マクロはコンパイル前に置き換えられるため、エラーが起きた時にどこが原因か分かりにくい場合があります。また、演算式をマクロに使うと、思わぬ計算順序になってしまうことがあるため、慣れないうちは数字や文字列の置き換えに使う方が安心です。

さらに、多くのC言語プログラムでは大文字で書くのが一般的です。これは変数との区別を付けやすくするためで、慣習として多くの教科書やプロジェクトで採用されています。読みやすいプログラムはバグも見つけやすく、チーム開発でも他の人が理解しやすくなるという利点があります。

関連記事:
カテゴリの一覧へ
新着記事
New1
C++
C++のメンバアクセス演算子を完全解説!初心者でもわかる . → :: の使い方まとめ
New2
Rust
Rustの文字列を極める!&str(文字列スライス)の基本概念とString型との違い
New3
C++
C++のキャスト演算子を完全解説!dynamic_cast・static_cast・const_cast・reinterpret_castを初心者向けに説明
New4
C++
C++開発のIDE選びを完全ガイド!初心者でもわかるCLion・Eclipse CDT・Qt Creator比較
人気記事
No.1
Java&Spring記事人気No1
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.2
Java&Spring記事人気No2
C言語
C言語を学ぶ初心者におすすめの環境構築手順【2025年版】
No.3
Java&Spring記事人気No3
C言語
C言語のソースコードとヘッダファイルの役割とは?初心者向けにわかりやすく解説!
No.4
Java&Spring記事人気No4
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.5
Java&Spring記事人気No5
C言語
C言語開発でよく使われるエディタとIDEランキング【初心者向け完全ガイド】
No.6
Java&Spring記事人気No6
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.7
Java&Spring記事人気No7
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作
No.8
Java&Spring記事人気No8
C++
C++リンカとコンパイラのオプション設定を完全ガイド!初心者にもわかる開発環境の基礎