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

C言語におけるwhile(1)とwhile(0)の違いを徹底解説


はじめに:whileループの基本

C言語において「while」キーワードは、引数として渡した条件式が成立している間、ブロック内のコードを繰り返し実行するためのループ構文です。条件式の評価結果は「真(true)」か「偽(false)」のいずれかとなるため、条件が真であれば処理が繰り返され、偽であればブロック内のコードは一切実行されません。

この仕組みを踏まえると、while(1)とwhile(0)の違いは「条件として何を渡すか」によるものだと理解できます。以下でそれぞれの動作を詳しく見ていきましょう。

while(1):常に真と評価される無限ループ

while(1)は、条件が常に真として扱われるループです。そのため、ブロック内のコードが際限なく繰り返し実行されます。いわゆる「無限ループ」を作りたい場合に使われる書き方です。

ここで重要なポイントは、真と評価されるのが「1」だけではないということです。C言語では、whileに渡す整数がゼロ以外であれば、たとえ負の数(例:-5)であってもすべて「真」として扱われます。つまり、while(-1)やwhile(100)もwhile(1)と同じく無限ループになります。

なお、while(1)で作った無限ループから抜け出すには、break文やreturn文などを使って明示的に脱出する必要があります。

while(0):常に偽と評価され一度も実行されないループ

一方、while(0)は、条件が常に偽として扱われるループです。そのため、ブロック内のコードは一度も実行されず、プログラムはループ部分を素通りして次の処理へ進みます。

条件が偽と評価されるのは「0」が渡された場合のみです。ゼロ以外の整数はすべて真と見なされるため、while(0)だけが「決して実行されないループ」となるわけです。

while(1)とwhile(0)の違いまとめ

項目while(1)while(0)
条件の評価結果常に真常に偽
ブロック内の処理繰り返し実行される(無限ループ)一度も実行されない
ループからの脱出break文などが必要不要(そもそも入らない)
主な用途常時稼働が必要な処理(サーバー、組込み機器、ゲームループなど)デバッグ時に一時的に処理を無効化するなど

サンプルコードで動作を確認

while(1)のサンプルコード

#include <stdio.h>

int main(void){
    int i = 1;
    printf("ループ開始\n");
    while(1){
        printf("iの値: %d\n", i);
        if(i == 10){ // iが10になったらループを抜ける
            break;
        }
        i++;
    }
    printf("ループ終了\n");
    return 0;
}

実行結果

ループ開始
iの値: 1
iの値: 2
iの値: 3
iの値: 4
iの値: 5
iの値: 6
iの値: 7
iの値: 8
iの値: 9
iの値: 10
ループ終了

この例では、while(1)により条件が常に真となるため、iが10になったタイミングでbreak文を使って明示的にループを抜けています。もしbreak文がなければ、プログラムは永遠にループし続けます。

while(0)のサンプルコード

#include <stdio.h>

int main(void){
    int i = 1;
    printf("ループ開始\n");
    while(0){
        printf("iの値: %d\n", i);
        if(i == 10){
            break;
        }
        i++;
    }
    printf("ループ終了\n");
    return 0;
}

実行結果

ループ開始
ループ終了

while(0)の場合、条件が最初の判定の時点で偽と評価されるため、ブロック内のprintf文は一度も実行されません。「ループ開始」と「ループ終了」だけが出力されている点に注目してください。

実務での使いどころ

while(1)は、OSやファームウェアのメインループ、サーバーがクライアントの接続を待ち受ける処理、ゲームのメインループなど、「プログラムを停止させずに処理を続けたい場面」でよく使われます。

while(0)をあえて使うケースは多くありませんが、デバッグ作業中に特定の処理を一時的に無効化したい場合などに利用されることがあります。ただし、一般的にはプリプロセッサの#if 0〜#endifを使う方が意図が明確で推奨されています。

まとめ

while(1)とwhile(0)の違いは、条件式の評価結果にあります。while(1)は常に真のため無限ループとなり、break文などによる明示的な脱出が必要です。一方、while(0)は常に偽のため、ブロック内のコードは一度も実行されません。また、C言語では0以外の整数はすべて真と評価されるという点も併せて覚えておくと良いでしょう。

  1. GoとJavaの違いを徹底比較!特徴と使い分けのポイント

    プログラミング言語を選ぶ際、「Go」と「Java」のどちらを採用すべきか迷う開発者は少なくありません。どちらもGoogleや企業システムで広く使われる人気言語ですが、設計思想や言語仕様には大きな違いがあります。本記事では、それぞれの言語の特徴を解説したうえで、両者の主な違いを比較表を使ってわかりやすく整理します。 GoとはGoはGoogleが開発した手続き型(プロシージャル)プログラミング言語です。プログラムはパッケージ単位で構成され、シンプルで読みやすいコード記述を重視した設計になっています。動的言語に近い柔軟なパターンを取り入れつつ、静的型付けによる安全性も兼ね備えています。また、軽量スレ

  2. GoとPythonの違いを徹底比較|プログラミング言語としての特徴と使い分け

    Go(Golang)とはGoは、GoogleのRobert Griesemer、Rob Pike、Ken Thompsonの3名によって2007年に開発され、2009年にオープンソースとして公開された手続き型プログラミング言語です。並行処理(コンカレンシー)を含むプログラミングを容易にすること、そして開発環境への導入をシンプルにすることを目的として設計されました。シンプルな文法、高速なコンパイル、充実した標準ライブラリが特徴で、クラウドインフラやマイクロサービスの分野で広く採用されています。PythonとはPythonは、Guido van Rossumによって1991年に設計されたオブジェク