ユーニックス総合研究所

  • home
  • archives
  • c-for-mugenloop

C言語のfor文で無限ループを書く方法

  • 作成日: 2022-11-15
  • 更新日: 2023-12-25
  • カテゴリ: C言語

C言語のfor文で無限ループを書く方法

C言語のfor文で無限ループを書く方法について解説します。
C言語にはループ文にfor文やwhile文などがあります。

このfor文などを使うと無限ループを書くことが可能です。
結論を言うと↓のように書きます。

    for (;;) {  
        printf("loop!\n");  
    }  

具体的に解説していきます。

関連記事

目が覚めるC言語のdo-while文の使い方【ループ処理、初心者向け】
明快!C言語のcontinue文の使い方
君はまだC言語のdefineのすべてを知らない【マクロ、プリプロセス】

目が覚めるC言語のdo-while文の使い方【ループ処理、初心者向け】
明快!C言語のcontinue文の使い方
君はまだC言語のdefineのすべてを知らない【マクロ、プリプロセス】

無限ループとは何か?

無限ループとは何なのでしょうか?
これは「終わりのないループ処理」のことです。
延々と繰り返しを続けるループのことを言います。

無限ループではループの終了条件が省略されるときがあります。
あるいは定数でずっと真になるようにセットする場合もあります。
ですのでそういう設定をしたループ文は延々と回り続けます。

無限ループは終わりのないループ。
果たしてこんなループに使い道はあるのでしょうか?
次に無限ループの使い道について解説していきます。

無限ループはどんな時に使うのか?

無限ループはどんな時に使うのでしょうか?
無限ループはいろいろなプログラムで使われます。
おもに長時間稼働するようなプログラムで使われることがあります。

たとえばゲームプログラムなどがそうです。
ゲームでは長時間ユーザーがゲームをプレイします。
ですのでそのプレイに対応できるように無限ループを作って延々と処理を行います。
無限ループの中でゲームの状態を変更しながらユーザーの入力に対応します。

無限ループを使わないすぐ終了するタイプのプログラムも存在ます。
たとえばUNIX系のコマンドプログラムなどがそうです。
これらのコマンドは無限ループせずにすぐ終了することがほとんどです。

このように無限ループは比較的によく使われるループ処理です。
ゲームや業務系プログラムなどさまざまな用途に使われます。

無限ループからの脱出方法

無限ループの処理を書くときに覚えておきたいのが↓です。

  • 無限ループから脱出する方法

無限ループを書いたのはいいけど延々とループしてプログラムが終わらなくなってしまった。
というケースがあると思います。
そうなったらウィンドウをわざわざ閉じないといけません。
それは面倒ですよね。

そういう時は「Ctrl + C」でループから脱出するのが一般的です。

「Ctrl + C」はプログラムにシグナルを送信します。
そしてプログラムはそのシグナルを検知してプログラムを終了させます。

端末で動かすプログラムで無限ループになった場合はこの「Ctrl + C」でループから抜けましょう。

無限ループから抜けるときは「Ctrl + C」。
これは覚えておいてください。

for文の構造

for文の構造についておさらいしておきます。
for文は↓のような構造になっています。

for (初期化式; 終了条件; 更新式) {  
    処理;  
}  

for文は最初に初期化式が実行されます。
そして終了条件が確認されて条件が真ならループします。
処理が実行されて次に更新式が実行されます。
そしてまた終了条件が確認されます。

for文はこのような過程でループを繰り返します。
これら3つの初期化、終了条件、更新の式は省略することが可能です。
終了条件を省略した場合はそのfor文は無限ループになります。

for文で無限ループを書く

for文を無限ループにしたい場合は↓のいずれかの方法が考えられます。

  • 条件式を省略する
  • 条件式を常に真にする

たとえば条件式を省略する場合は↓のようなfor文になります。

for (int i = 0; ; i += 1) {  
    printf("%d\n", i);  
}  

↑のfor文は初期化式と更新式は省略せずに終了条件だけ省略しているfor文です。
このようなfor文は無限ループになります。
カウント変数iがインクリメントされていきます。
しかし無限ループになっているのでそのうちiはint型の範囲を超えてしまうでしょう。

また初期化式と更新式も省略したfor文は↓のようになります。

for (;;) {  
    printf("loop\n!");  
}  

カッコの中にセミコロンが2つ並んでるfor文です。
なんだか泣いてるみたいですね。
「泣き顔for文」とか「tear for」とか命名したくなります。
(一般的ではないですが)

また条件式を真になるように書く場合は↓のように書くこともできます。

for (; 1; ) {  
    printf("loop\n!");  
}  

↑の無限ループはあまり一般的ではないというかそんなに見たことないです。
tear forのほうが美しいですよね。

for文の無限ループからbreakで脱出する

無限ループから脱出したい場合はbreak文を使います。
たとえばfor文の無限ループでif文とbreak文を使って脱出する場合は↓のように書きます。

for (int i = 0; ; i += 1) {  
    if (i == 4) {  
        break;  
    }  
}  

↑のようなfor文を書くとカウント変数iが4になったときにループから脱出します。

おわりに

今回はC言語のfor文で無限ループを書く方法について解説しました。
for文で無限ループを書く場合は条件式を省略しちゃいましょう。

🦝 < 泣き顔for文

🐭 < 泣かないで