C/C での無限ループの検出
C/C では、通常、次の 3 つの構造のいずれかを使用して無限ループが作成されます。
- for(;;) {}
- while(1) {} / while(true) {}
- do {} while(1) / do {} while (true)
これらの形式の選択は主に好みの問題であり、どれも客観的に優れているというわけではありません。
構文と動作の違い
-
for(;;) {}: 標準の C 構文。カーニハンとリッチーの独創的な研究に遡ります。これは歴史的なものとみなされますが、依然として広く受け入れられています。
-
while(1) {}: 動作において for(;;) {} と同等であり、広く使用されています。最新のコンパイラは、一定の条件に対してコンパイラ警告を発行しますが、これは欠点となる可能性があります。
-
while(true) {}: while(1) {} のより読みやすい代替手段ですが、 bool 型であり、ヘッダー ファイルのインクルードが必要な場合があります。
最新のコンパイラーの動作
最新のコンパイラーは通常、3 つの形式すべてを同一のものとして扱い、同じマシン コードになります。彼らは、これらのループが無限に続くことを意図しており、明示的な条件チェックを実行しないことを認識し、それに応じてコードを最適化します。
個人設定
使用する形式の選択これは最終的には個人的なものであり、次のような要素に影響されます。
-
可読性: 一部のプログラマーは、見た目の明瞭さのために while(true) {} を好みます。
-
コンパイラ警告: while(1) {} および while(true) {} は、定数条件により警告メッセージをトリガーする可能性があります。
-
歴史的遺産: for(;;) {
最終的に、無限ループの最適な形式は、コードの規則やガイドラインを尊重しながら、プログラマの好みやスタイルに合わせた形式です。それはあるかもしれません。
以上がC/C の無限ループ: どの形式が最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。