
C言語基礎|短絡評価
短絡評価とは何か
論理演算子を使った条件式では、すべての式が必ず評価されるとは限りません。
ある時点で「結果が確定した」と分かった瞬間に、残りの評価を行わずに終了する仕組みがあります。
これを 短絡評価(short circuit evaluation) と呼びます。
「もう答えが分かっているのに、わざわざ続きを調べない」
―そんな、人間の判断にとても近い動きです。

論理 AND(&&)における短絡評価
まず、論理 AND 演算子 && から見ていきましょう。
評価の考え方
式
month >= 3 && month <= 5
は、「3以上かつ5以下なら春」という意味です。
ここで、month の値が 2 だったとします。
| 評価対象 | 評価結果 |
|---|---|
| month >= 3 | 0(偽) |
| month <= 5 | 評価されない |
| 式全体 | 0 |
左側の month >= 3 が偽になった時点で、
「両方が真でなければならない」AND の条件は成立しません。
そのため 右側を調べる必要がなくなり、評価が省略されます。
論理 OR(||)における短絡評価
次に、論理 OR 演算子 || を見てみましょう。
評価の考え方
冬の判定を次のように書くとします。
month == 1 || month == 2 || month == 12
ここで、month が 1 の場合を考えます。
| 評価対象 | 評価結果 |
|---|---|
| month == 1 | 1(真) |
| month == 2 | 評価されない |
| month == 12 | 評価されない |
| 式全体 | 1 |
OR は「どれか一つでも真なら成立」です。
左端で真が確定した瞬間に、残りを調べる意味がなくなります。
そのため、右側の評価はすべて省略されます。
短絡評価が行われる理由
短絡評価が行われる理由は、大きく分けて2つあります。
| 理由 | 説明 |
|---|---|
| 無駄な処理を避ける | 結果が確定している評価を行わない。 |
| 安全性を高める | 危険な処理を実行しないですむ。 |
特に後者は、実務でも非常に重要です。
安全性を高める短絡評価の例
次の条件式を考えてみましょう。
divisor != 0 && value / divisor > 10
| 状態 | 動作 |
|---|---|
| divisor が 0 | 左が偽 → 右は評価されない。 |
| divisor が 非0 | 左が真 → 右を評価 |
短絡評価のおかげで、ゼロ除算が発生しません。
これは、単なる高速化ではなく 安全なプログラムを書くための仕組み です。
短絡評価のルールまとめ
短絡評価のルールを表にまとめておきましょう。
| 演算子 | 左オペランドの結果 | 右オペランド |
|---|---|---|
| && | 偽(0) | 評価されない |
| && | 真(非0) | 評価される |
| || | 真(非0) | 評価されない |
| || | 偽(0) | 評価される |
この表を覚えておけば、条件式の挙動で迷うことはほとんどなくなります。
重要ポイント
- 短絡評価は && と || に必ず適用される。
- 結果が確定した時点で、右オペランドは評価されない。
- 処理の高速化だけでなく、安全性の向上にも役立つ。
演習問題(短絡評価を意識して書いてみよう)
演習3-8
二つの整数値を読み込み、それらの値の差が
10 以下であれば
それらの差は 10 以下です。
そうでなければ
それらの差は 11 以上です。
と表示するプログラムを作成せよ。
論理 OR 演算子を利用すること。
解答例
プロジェクト名:chap3-11-1 ソースファイル名:chap3-11-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
int a, b;
puts("二つの整数を入力せよ。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
if (a - b <= 10 || b - a <= 10)
puts("それらの差は10以下です。");
else
puts("それらの差は11以上です。");
return 0;
}解説
- a - b が 10 以下なら即真
- 偽の場合のみ b - a を評価
- OR の短絡評価を自然に活用した条件式です。
ここまで理解できれば、
論理演算子 × if 文 × 安全な条件式 はもう怖くありません。
