Muss ein Programm beendet werden? Mit anderen Worten, ist ein Programm, das für immer technisch undefiniertes Verhalten läuft? Beachten Sie, dass es hier nicht um leere Schleifen geht. Apropos Programme, die für immer "Zeug" (dh beobachtbares Verhalten) tun.
ZB so etwas:
int main()
{
while (true)
{
try
{
get_input(); // calls IO
process();
put_output(); // calls IO, has observable behavior
// never break, exit, terminate, etc
} catch(...)
{
// ignore all exceptions
// don't (re)throw
// never go out of loop
}
}
}
Dies ist eher eine akademische Frage, da empirisch alle vernünftigen Compiler den erwarteten Code für die oben genannte Art von Programm generieren (vorausgesetzt natürlich keine andere UB-Quelle). Und ja, natürlich gibt es viele Programme, die niemals beendet werden (Betriebssystem, eingebettet, Server). Allerdings ist der Standard manchmal skurril, daher die Frage.
Tangential: Viele (einige?) Definitionen von "Algorithmus" erfordern, dass ein Algorithmus beendet werden muss , dh eine Reihe von Operationen, die niemals beendet werden, werden nicht als Algorithmus betrachtet.
Tangential. Das Stoppproblem besagt, dass es keinen Algorithmus geben kann, um zu bestimmen, ob ein beliebiges Programm für eine Eingabe beendet wird. Da es jedoch für dieses spezielle Programm keinen Zweig gibt, der zum Verlassen von main führt, kann der Compiler leicht bestimmen, dass das Programm niemals enden wird. Dies ist jedoch irrelevant, da es sich um einen Sprachanwalt handelt.