是否需要一个程序来终止?换句话说,永远运行的程序在技术上是未定义行为吗?注意,这不是关于空循环的问题。讨论的是那些永远执行“操作”(即可观察行为)的程序。
例如,像这样的内容:
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来源)。当然,有很多程序永远不会终止(操作系统、嵌入式系统、服务器等)。但是标准有时候很古怪,所以才会有这个问题。
旁观者:许多(一些?)算法定义要求算法必须终止,即一系列永远不会终止的操作不被视为算法。
旁观者。停机问题指出,不存在一种算法能够确定任意程序是否在给定输入下结束。然而,对于这个特定的程序,由于没有任何分支导致离开main函数,编译器可以轻松确定程序永远不会结束。但这与问题的语言法律无关。