Heim > Backend-Entwicklung > C++ > Hauptteil

## Ist Rekursion ohne Nebenwirkungen ein undefiniertes Verhalten in C?

Linda Hamilton
Freigeben: 2024-10-26 12:19:02
Original
998 Leute haben es durchsucht

## Is Recursion Without Side Effects Undefined Behavior in C  ?

Ist Rekursion ohne Nebenwirkungen undefiniertes Verhalten?

In C 11 gelten Endlosschleifen ohne Nebenwirkungen, wie die folgenden, als undefiniert Verhalten (UB):

<code class="cpp">int main() {
   while (true) {}
}</code>
Nach dem Login kopieren

Das Verhalten ist UB aufgrund einer Bestimmung im ISO C 11-Standard (1.10p24), die besagt:

The implementation may assume that any thread will eventually do one of the following:
 - terminate, 
 - make a call to a library I/O function, 
 - access or modify a volatile object, or 
 - perform a synchronization operation or an atomic operation.
Nach dem Login kopieren

Diese Bestimmung gilt sowohl für Schleifenbeispiel und das folgende rekursive Programm:

<code class="cpp">void foo() {
   foo();
}

int main() {
   foo();
}</code>
Nach dem Login kopieren

In diesem rekursiven Programm gibt es keine Nebenwirkungen, es wird jedoch auch als UB betrachtet, da es gegen die Annahme verstößt, dass jeder Thread irgendwann eine der aufgeführten Aktionen ausführen wird in 1.10p24.

Beachten Sie, dass die Rekursion auch dann undefiniertes Verhalten aufweisen könnte, wenn diese Bestimmung nicht vorhanden wäre, wenn sie den in der Implementierung definierten Grenzwert für verschachtelte rekursive Funktionsaufrufe überschreitet. Dies war in C immer der Fall, unabhängig von der Version.

Das obige ist der detaillierte Inhalt von## Ist Rekursion ohne Nebenwirkungen ein undefiniertes Verhalten in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage