副作用のない無限ループは、C 11 標準では明示的に未定義動作 (UB) とみなされます。次のプログラムについて考えてみましょう:
<code class="cpp">int main() { while (true) {} }</code>
このプログラムは意味のあるアクションを実行せず、無期限に実行し続けることができるため、UB です。
Now 、再帰プログラムを考えてみましょう:
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
このプログラムも UB ですか?
標準では (1.10p24):
実装では、スレッドが最終的に次のいずれかを実行すると想定できます:これは、無限ループと再帰の両方に適用されます。終了
- ライブラリ I/O 関数の呼び出し
- 揮発性オブジェクトにアクセスまたは変更するか、
- 同期操作またはアトミック操作を実行します。
これにもかかわらず、再帰が入れ子になった再帰関数呼び出しの実装制限を超えると、未定義の動作が発生する可能性があります。これはいつものことです。
以上が質問の構造と記事の焦点を念頭に置いて、タイトルのオプションをいくつか示します。 **オプション 1 (直接的かつ集中的):** * **C の再帰は未定義の動作ですか?** **オプション 2 (強調の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。