Требуется ли прекращение работы программы? Другими словами, это программа, которая всегда работает технически с неопределенным поведением? Обратите внимание, что это не о пустых циклах. Разговор о программах, которые делают "вещи" (то есть наблюдаемое поведение) навсегда.
Например, что-то вроде этого:
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, серверы). Однако стандарт иногда бывает странным, поэтому возникает вопрос.
Тангенциальный: многие (некоторые?) Определения «алгоритма» требуют, чтобы алгоритм завершился , то есть серия операций, которая никогда не завершается, не считается алгоритмом.
Тангенциальное. Проблема остановки говорит о том, что не может существовать алгоритм, чтобы определить, завершается ли произвольная программа для ввода. Однако для этой конкретной программы, поскольку нет ветки, которая приводит к выходу из main, компилятор может легко определить, что программа никогда не закончится. Это, однако, не имеет значения, поскольку речь идет о языке юриста.