프로그램을 종료해야합니까? 다시 말해서 기술적으로 정의되지 않은 동작을 영원히 실행하는 프로그램입니까? 이것은 빈 루프에 관한 것이 아닙니다. 영원히 "물건"(즉, 관찰 가능한 행동)을하는 프로그램에 대해 이야기합니다.
예를 들면 다음과 같습니다.
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, 임베디드, 서버). 그러나 표준은 기발한 일이므로 문제가됩니다.
접선 : "알고리즘"에 대한 많은 (일부?) 정의 는 알고리즘을 종료해야합니다 . 즉, 절대 종료되지 않는 일련의 연산은 알고리즘으로 간주되지 않습니다.
접하는. 정지 문제는 입력에 대해 임의의 프로그램이 완료되는지를 판별하는 알고리즘이 존재할 수 없음을 나타냅니다. 그러나이 특정 프로그램의 경우 메인에서 벗어나는 분기가 없기 때문에 컴파일러는 프로그램이 결코 끝나지 않을 것이라고 쉽게 결정할 수 있습니다. 그러나 질문이 언어 변호사이기 때문에 이것은 무의미합니다.