C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C/C++入門】while(1)とwhile(0)の違いをわかりやすく解説

本記事では、C言語およびC++における while(1)while(0) の違いについて詳しく解説します。while はC/C++に用意されている繰り返し処理(ループ)の一つで、指定した条件を評価し、その条件が真(true)である間、ループ内の文を繰り返し実行します。

while(1):無限ループを作る

while(1)while にゼロ以外の値を指定した場合、条件が常に真と判定されるため、無限ループになります。条件式には「1」などの非ゼロ値が書かれているだけで、偽になることがないため、ループ内の処理が永久に実行され続けます。

この無限ループから抜け出すには、if 文などの条件分岐と break 文を組み合わせて、任意のタイミングでループを終了させる必要があります。

サンプルコード

#include<iostream>
using namespace std;
main(){
    int i = 0;
    cout << "Starting Loop" << endl;
    while(1){
        cout << "The value of i: " << ++i <<endl;
        if(i == 10){ //iが10になったらループを抜ける
            break;
        }
    }
    cout << "Ending Loop" ;
}

実行結果

Starting Loop
The value of i: 1
The value of i: 2
The value of i: 3
The value of i: 4
The value of i: 5
The value of i: 6
The value of i: 7
The value of i: 8
The value of i: 9
The value of i: 10
Ending Loop

この例では、変数 i が10になった時点で break 文が実行され、無限ループを正常に抜け出しています。このように、サーバーの常駐処理やイベント待ち受けなど、明示的に終了条件を制御したい場面で while(1) はよく利用されます。

while(0):一度も実行されないループ

一方、while(0) は条件が常に偽(false)として扱われます。C/C++では「0」は偽、「0以外」は真と判断されるため、ループ内の文は一度も実行されることなく、即座にスキップされます。そのため、while(0) のループは実質的に無意味です。

サンプルコード

#include<iostream>
using namespace std;
main(){
    int i = 0;
    cout << "Starting Loop" << endl;
    while(0){
        cout << "The value of i: " << ++i <<endl;
        if(i == 10){ //iが10になったらループを抜ける
            break;
        }
    }
    cout << "Ending Loop" ;
}

実行結果

Starting Loop
Ending Loop

実行結果を見ると、ループ内の出力は一切行われておらず、「Starting Loop」と「Ending Loop」だけが表示されています。

まとめ:両者の違い

while(1) は条件が常に真となるため無限ループを実現し、break 文などで意図的に抜け出す必要があります。対して while(0) は条件が常に偽となるため、ループ本体は一度も実行されません。なお、C++では可読性を高めるために while(true) / while(false) と記述することも可能です。


  1. C++におけるリテラルと定数の違いとは?初心者向けにわかりやすく解説

    リテラルとは? リテラル(literal)とは、プログラムのコードの中に値そのものとして直接記述された値のことです。たとえば、数値の 25 や文字列の Hello World は、どちらもリテラルに該当します。 定数とは? 一方、定数(constant)は、リテラルに名前を付けて扱えるようにしたものです。プログラムの中で何度も参照する、決まっていて変更されない値がある場合には、リテラルをそのまま書き並べるのではなく、定数として宣言して使うのが良い習慣とされています。 たとえば、円の面積や円周などを計算するとき、プログラムのさまざまな場所で円周率を使用することになります。このように同じ値を繰

  2. 【C++】前置インクリメント「++i」と後置インクリメント「i++」の違いとは?

    C++のインクリメント演算子「++」には、前置(prefix)と後置(postfix)の2つの形式があり、それぞれ動作に大きな違いがあります。前置インクリメント(++i):変数 i の値を先に1増やし、その増加後の新しい値が式の値になります。つまり、「まず増加してから値を返す」動作です。後置インクリメント(i++):変数 i の値は1増やされますが、式の値としては増加前の元の値が使われます。つまり、「まず値を返してから増加する」動作です。サンプルコード実際のコードを見ながら、その違いを詳しく確認してみましょう。#include<iostream> using namespace s