Bir programın sonlanması gerekiyor mu? Diğer bir deyişle, teknik olarak Tanımsız Davranış sonsuza dek çalışan bir program mı? Bunun boş döngülerle ilgili olmadığını unutmayın. Sonsuza kadar "şeyler" (yani gözlemlenebilir davranış) yapan programlar hakkında konuşmak.
Örneğin böyle bir şey:
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
}
}
}
Bu daha akademik bir sorudur, çünkü ampirik olarak tüm aklı derleyiciler yukarıdaki program için beklenen kodu üretecektir (elbette başka bir UB kaynağı olmadığı varsayılarak). Ve evet, elbette hiç bitmeyen bir çok program var (os, gömülü, sunucular). Ancak standart bazen tuhaf, bu nedenle soru.
Teğetsel: "algoritma" nın birçok (bazı?) Tanımı, bir algoritmanın sonlandırılmasını gerektirir , yani hiçbir zaman sonlandırmayan bir dizi işlem bir algoritma olarak kabul edilmez.
Teğet. Durma problemi, bir girdi için rasgele bir programın tamamlanıp tamamlanmadığını belirlemek için bir algoritma bulunamayacağını belirtir. Ancak bu özel program için ana hattan çıkmaya yol açan bir dal olmadığından, derleyici programın hiç bitmeyeceğini kolayca belirleyebilir. Ancak soru dil-avukat olduğu için bu konuyla ilgisizdir.