É necessário um programa para terminar? Em outras palavras, é um programa que roda para sempre tecnicamente Comportamento indefinido? Observe que não se trata de loops vazios. Falando sobre programas que fazem "coisas" (ou seja, comportamento observável) para sempre.
Por exemplo, algo como isto:
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
}
}
}
Esta é mais uma questão acadêmica, pois empiricamente todos os compiladores sãos geram o código esperado para o tipo de programa acima (assumindo, é claro, nenhuma outra fonte de UB). E sim, é claro que existem muitos programas que nunca terminam (SO, incorporado, servidores). No entanto, o padrão é peculiar às vezes, daí a questão.
Tangencial: muitas (algumas?) Definições de "algoritmo" requerem que um algoritmo seja finalizado , ou seja, uma série de operações que nunca termina não é considerada um algoritmo.
Tangencial. O problema de parada afirma que não existe um algoritmo para determinar se um programa arbitrário termina para uma entrada. No entanto, para esse programa em particular, uma vez que não há ramificação que saia do main, o compilador pode determinar facilmente que o programa nunca terminará. No entanto, isso é irrelevante, pois a questão é o advogado da linguagem.