하지만 프로그램이 중단되지 않는다고 보장할 수 없는 연산은 이렇게 최적화하지 않는다. 앞의 예제에서는 x의 타입에 큰 영향을 받는다. x의 현재 값이 타입의 상한에 가깝다면 x += 7이라는 단순한 연산에서 오버플로(overflow)가 발생할 수 있다. 오버플로는 타입마다 처리 방식이 다르다. 지금까지 본 것처럼 부호 없는 타입에서 발생하는 오버플로는 큰 문제가 없다. 따라서 최적화된 연산의 결과는 항상 최적화 이전에 두 개로 분리된 문장의 결과와 항상 일치한다. 하지만 (signed와 같은) 부호 있는 정수 타입이나 (double과 같은) 부동 소수점 타입에서 발생하는 오버플로는 예외(exception)가 발생하여 프로그램이 중단될 수 있으므로 이럴 때는 최적화를 적용하면 안 된다.
앞에서 설명했듯이 프로그램 코드와 추상 상태 기계 사이의 이러한 느슨한 관계를 최적화(optimization)라고 부른다. 이는 굉장히 중요한 특성으로서 간결한 표현과 함께 C 언어가 그보다 기능이 풍부한 다른 프로그래밍 언어에 비해 뛰어난 주된 이유로 꼽힌다. 결론적으로 다음과 같이 한 마디로 정리할 수 있다.
TAKEAWAY 5.9 최적화 수준은 타입에 따라 결정된다.