Чи потрібно програму припинити? Іншими словами, це програма, яка працює вічно технічно Undefined Behavior? Зауважте, це не про порожні петлі. Якщо говорити про програми, які назавжди "наповнюють" (тобто спостерігається поведінка).
Наприклад, щось подібне:
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
}
}
}
Це скоріше академічне питання, оскільки емпірично всі розумні компілятори генерують очікуваний код для вищевказаного типу програми (якщо, звичайно, немає іншого джерела UB). І так, звичайно, існує дуже багато програм, які ніколи не припиняються (os, embeded, сервери). Однак іноді стандарт химерний, тому питання.
Тангенціальна: багато (деякі?) Визначення поняття «алгоритм» вимагають, щоб алгоритм повинен припинитися , тобто серія операцій, яка ніколи не припиняється, не вважається алгоритмом.
Тангенціальна. Проблема зупинки стверджує, що не може існувати алгоритм, щоб визначити, чи довільна програма закінчується для введення. Однак для цієї конкретної програми, оскільки немає гілки, яка веде до виходу з основної, компілятор може легко визначити, що програма ніколи не закінчиться. Це, однак, не має значення, оскільки питання стосується мови-юриста.