다음 코드는 MSVC가 부호 있는(int)와 부호 없는 정수 비교에 대해 경고를 발행하지 않는 이유에 대한 질문을 제기합니다. 부호 없는(부호 없는 정수) 정수 값:
int a = INT_MAX; unsigned int b = UINT_MAX; bool c = false; if(a == b) // no warning expected here c = true;
C에 따르면 표준에서는 부호 있는 정수와 부호 없는 정수를 비교할 때 부호 있는 값이 부호 없는 값으로 변환됩니다. 이 변환은 (-1 == -1) 및 ((unsigned)-1 == -1)이 true이므로 동등 비교에 대한 값을 유지합니다. 그러나 보다 큼(>) 또는 보다 작음(<)과 같은 다른 비교 연산자의 경우 변환으로 인해 예상치 못한 결과가 발생할 수 있습니다. 예를 들어 (-1 > 2U)는 true로 평가됩니다.
MSVC 개발자는 다음과 같은 다양한 연산자에 대한 경고 수준과 관련하여 특정 선택을 했습니다.
이 접근 방식을 사용하면 다음에 대한 경고가 발생합니다. 예상 결과를 유지하는 동등 비교에 대한 불필요한 경고를 피하면서 변환이 놀라운 동작으로 이어질 수 있는 시나리오.
위 내용은 MSVC가 부호 있는/부호 없는 정수 동등 비교에 대해 경고하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!