Heim > Artikel > Backend-Entwicklung > ## Gilt die unendliche Rekursion in C als undefiniertes Verhalten?
Ist unendliche Rekursion undefiniertes Verhalten (UB)?
Im Bereich der C-Programmierung stellt sich die Frage, ob unendliche Rekursion undefiniertes Verhalten darstellt ( UB) war ein Thema der Debatte. Während bestimmte Szenarien mit Schleifen als UB identifiziert wurden, bleibt ungewiss, ob die unendliche Rekursion selbst unter diese Klassifizierung fällt.
In C 11 wird ein Programm betrachtet, das eine Endlosschleife ohne Nebenwirkungen enthält, wie unten gezeigt UB:
<code class="cpp">int main() { while (true) {} }</code>
Dies ist im C-Standard als 1.10p24 dokumentiert: „Die Implementierung kann davon ausgehen, dass jeder Thread irgendwann eine der folgenden Aktionen ausführt: beenden, einen Aufruf einer Bibliotheks-E/A-Funktion durchführen.“ , auf ein flüchtiges Objekt zugreifen oder es ändern oder eine Synchronisierungsoperation oder eine atomare Operation durchführen. Da eine Endlosschleife ohne Nebenwirkungen niemals eine dieser Aktionen ausführt, wird sie als UB betrachtet.
Es stellt sich dann die Frage, ob das folgende Programm mit unendlicher Rekursion auch UB darstellt:
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
Während das obige Programm intuitiv als UB angesehen werden könnte, geht der Standard nicht explizit auf dieses spezielle Szenario ein. Die entsprechende Passage in 1.10p24 bezieht sich auf Schleifen, nicht auf Rekursion.
Es ist jedoch zu beachten, dass eine übermäßige Rekursion dazu führen kann, dass die Implementierungsgrenze der Anzahl verschachtelter rekursiver Funktionsaufrufe überschritten wird. Dies war schon immer der Fall und kann zu undefiniertem Verhalten führen, unabhängig von der UB-Klassifizierung der Rekursion selbst.
Das obige ist der detaillierte Inhalt von## Gilt die unendliche Rekursion in C als undefiniertes Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!