as-if 규칙(TAKEAWAY 5.8)에 따르면 두 번째 루프는 다음과 같이 무한 루프(infinite loop) 형태로 최적화된다.
while (true) do_something();
TAKEAWAY 5.55 추상 상태 기계가 비정의 상태에 도달하면 더 이상 실행을 지속한다는 가정을 할 수 없다.
그뿐 아니라 컴파일러는 이러한 비정의 연산을 내키는 대로 정의해버릴 수 있는데, 그 상태에 도달할 수 없다고 가정하고 결론을 낼 가능성도 있다.
일반적으로 정의되지 않은 상태(비정의 상태)에 도달한 프로그램 동작을 비정의 동작(undefined behavior)이라고 표현한다. 표현이 좀 부정적이지만 프로그램의 겉보기 동작에는 문제가 없을 때가 많다. 하지만 문제가 발생하더라도 상당 시간 동안 눈치채지 못할 수 있다.
TAKEAWAY 5.56 연산에서 비정의 동작이 발생하지 않게 하는 것은 프로그래머의 책임이다.
더 심각한 문제는 ‘일부’ 플랫폼에 제공되는 ‘일부’ 표준 컴파일러에서는 아무런 문제없이 컴파일된다는 것이다. 이런 플랫폼에서는 부호 있는 정수의 산술 연산이 정의되어 있지 않기 때문에 사실상 부호 없는 타입과 같다. 그런데 플랫폼이나 컴파일러나 옵션이 달라지면 컴파일 결과도 달라지므로 수년 동안 문제없이 작동하던 프로그램에서 갑자기 문제가 발생할 수 있다.