> 백엔드 개발 > C++ > MSVC가 부호 있는/부호 없는 정수 동등 비교에 대해 경고하지 않는 이유는 무엇입니까?

MSVC가 부호 있는/부호 없는 정수 동등 비교에 대해 경고하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-23 07:18:21
원래의
674명이 탐색했습니다.

Why Doesn't MSVC Warn About Signed/Unsigned Integer Equality Comparisons?

부호 있는/부호 없는 정수 비교에 대한 MSVC 경고

다음 코드는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿