Heim > Artikel > Backend-Entwicklung > Hier sind einige Titeloptionen unter Berücksichtigung der Fragenstruktur und des Fokus des Artikels: **Option 1 (direkt und fokussiert):** * **Ist Rekursion in C undefiniertes Verhalten?** **Option 2 (Hervorheben
Endlosschleifen ohne Nebenwirkungen werden im C 11-Standard explizit als undefiniertes Verhalten (UB) betrachtet. Betrachten Sie das folgende Programm:
<code class="cpp">int main() { while (true) {} }</code>
Dieses Programm ist UB, weil es keine sinnvollen Aktionen ausführt und unbegrenzt weiterlaufen kann.
Jetzt Betrachten wir ein rekursives Programm:
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
Ist dieses Programm auch UB?
Der Standard besagt, dass (1.10p24):
Die Implementierung kann davon ausgehen, dass jeder Thread irgendwann eine der folgenden Aktionen ausführt:
- beenden
- eine Bibliotheks-E/A-Funktion aufrufen
- Auf ein flüchtiges Objekt zugreifen oder es ändern oder
- eine Synchronisationsoperation oder eine atomare Operation durchführen.
Dies gilt sowohl für die Endlosschleife als auch für die Rekursion.
Trotzdem kann die Rekursion immer noch zu undefiniertem Verhalten führen, wenn sie die Implementierungsgrenze verschachtelter rekursiver Funktionsaufrufe überschreitet. Das war schon immer so.
Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen unter Berücksichtigung der Fragenstruktur und des Fokus des Artikels: **Option 1 (direkt und fokussiert):** * **Ist Rekursion in C undefiniertes Verhalten?** **Option 2 (Hervorheben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!