C/C での無限ループの検出
C/C では、通常、次の 3 つの構造のいずれかを使用して無限ループが作成されます。
- のため(;;) {}
- 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/C の無限ループ: どの形式が最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。