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

C言語の定数式とコンパイル時評価の仕組みを完全ガイド!初心者でも分かる基本と考え方

C言語の定数式とコンパイル時評価の仕組み
C言語の定数式とコンパイル時評価の仕組み

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

生徒

「C言語で数字や計算を書くときに、コンパイル時に決まるとか、定数式とか聞いたことがあります。でも仕組みがよく分かりません。」

先生

「C言語では、プログラムを実行する前の段階で計算できる値があります。それが定数式で、コンパイル時評価と深く関係しています。」

生徒

「実行する前に計算されるなら、速くなったり便利になるということですか?」

先生

「その通りです。では、定数式とコンパイル時評価がどう役に立つのか、一緒に見ていきましょう。」

1.定数式とは?

1.定数式とは?
1.定数式とは?

C言語の定数式とは、プログラムを実行する前、コンパイル段階で計算できる式のことです。たとえば、1 + 210 * 5など、計算結果が必ず同じになる式です。コンピュータが動かなくても、紙の上で答えが分かるような式と考えると理解しやすくなります。

コンパイルとは、C言語で書いたプログラムをコンピュータが理解できる形に変換する作業のことです。そして定数式がコンパイル時に計算されることで、実行時の負担が減り、処理が速くなります。

2.定数式の具体例

2.定数式の具体例
2.定数式の具体例

C言語では、配列のサイズやマクロの定義など、定数式が使われる場面がたくさんあります。例えば、配列を作るときに大きさを数字で指定することができます。


#define SIZE 10
int array[SIZE];

ここで指定されているSIZEは計算するまでもなく数字が決まっています。つまりコンパイル時に確定できる値です。

3.コンパイル時評価とは?

3.コンパイル時評価とは?
3.コンパイル時評価とは?

コンパイル時評価とは、コンパイルの段階で計算できる式を評価し、結果を先に決めてしまう仕組みのことです。パソコンがプログラムを実行する前に答えが決まるため、実行中に計算する必要がなくなり、処理が速くなります。

たとえば、次のようなコードがあります。


#define BASE 3
#define HEIGHT 4
#define AREA (BASE * HEIGHT / 2)

このAREAは実行中に計算されるのではなく、コンパイル中に計算されます。つまりプログラムが動き出す前に答えが決まっています。

4.プログラムが速くなる理由

4.プログラムが速くなる理由
4.プログラムが速くなる理由

プログラムを実行しているとき、計算する回数が少ないほど処理は速くなります。もし同じ計算を何度も行うコードがあっても、定数式なら先に答えが決まっているので、計算そのものが不要になります。

例えば、毎回60 * 60 * 24という計算を書くより、定数式で先に決めておけば、コンパイラが直接結果を使います。


#define SECONDS_DAY (60 * 60 * 24)

値が変わることがないので、定数式として扱われます。

5.コンパイル時に決まらない式は?

5.コンパイル時に決まらない式は?
5.コンパイル時に決まらない式は?

定数式は変数を含まない式です。変数は実行中に変わることがあるため、コンパイルの段階では結果が分かりません。


int a = 3;
int b = 4;
int c = a + b; // これは定数式ではない

a + bは実行中に計算されるため、コンパイル時には評価できません。こうした違いが理解できると、C言語の定数とマクロの仕組みがより深く理解できます。

6.定数式は配列やマクロで役に立つ

6.定数式は配列やマクロで役に立つ
6.定数式は配列やマクロで役に立つ

配列のサイズ、マクロの置き換え、条件による切り替えなど、定数式が活躍する場面は多くあります。特に組み込み開発や高速処理が必要な場面では、コンパイル時に計算することで速度を改善できます。

プログラムは、読みやすく変更に強いほど扱いやすくなります。計算結果を毎回書かずに定数式として表現することで、修正が簡単になり、書き間違いも減ります。

7.定数式を意識する習慣を身につけよう

7.定数式を意識する習慣を身につけよう
7.定数式を意識する習慣を身につけよう

はじめのうちは意識しにくいポイントですが、プログラムを多く書くと、定数式を使ったほうが読みやすく、管理しやすいことが分かってきます。コンパイル時に決まるという特徴は、C言語ならではの強みです。

定数式とコンパイル時評価は、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++リンカとコンパイラのオプション設定を完全ガイド!初心者にもわかる開発環境の基礎
No.8
Java&Spring記事人気No8
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作