대부분의 컴파일러는 코드에서 이전에 수행 한 추가 연산이 캐리를 발생시키는 지 확인할 수 있습니까? 예를 들어산술 연산 후 워드 크기의 변수에 캐리가 있는지 확인하십시오.
:
런타임 조건 때문에 컴파일러의 도메인에 있지이다unsigned int n = 0xFFFFFFFF; // 8 F's
// doing some stuff here ...
n = n + 1;
// doing some stuff here, without changing the value of @var n
if (n > UINT_MAX) {
// n has a carry
}
네, 많은 컴파일러가 이것을 자동으로 탐지하는 코드를 생성 할 수 있습니다. 하지만 C 컴파일러는 아닙니다. –
니스, 도움이되고 냉소적 인 말 Hans – Dor
Ian Wetherbee와 Scott M. 모두 도움이되었지만 이안이 먼저 대답했습니다. 그래서 나는 그의 대답을 받아 들였고 Scott의 대답을지지했습니다. 모두 감사합니다 – Dor