MSVC가 경고 없이 부호 있는/부호 없는 동등 비교를 허용하는 이유
비교 연산자의 부호 있는/부호 없는 불일치를 엄격하게 처리함에도 불구하고 Microsoft Visual C (MSVC)에서는 부호 있는 유형과 부호 없는 유형 간의 동등성을 예기치 않게 허용합니다. 이 동작은 기본 변환 규칙에서 발생합니다.
통합 승격 및 서명/비서명 변환
비교 중에 MSVC는 C 표준 5/9에 설명된 통합 승격 규칙을 따릅니다. . 한 피연산자는 부호가 있고 다른 피연산자는 부호가 없으면 부호 있는 피연산자는 부호 없는 피연산자로 변환됩니다.
동치의 경우 이 변환은 결과에 영향을 주지 않습니다: -1 == (부호 없음) -1. 그러나 다른 비교 연산자의 경우에는 -1 > -1이 부호 없는 값으로 변환되므로 2U는 참입니다.
MSVC 경고 수준 및 부호 있는/부호 없는 비교
MSVC의 경고 수준에 따라 경고를 트리거하는 부호 있는/부호 없는 불일치가 결정됩니다. . 개발자는 동등함과 크거나 작음 비교와 관련하여 특정 선택을 했습니다.
이 접근 방식은 부호 있는/부호 없는 유형과 관련된 동등 비교는 종종 의도적인 반면, 혼합 유형에 대한 더 큰/낮은 비교는 의도적이라는 개발자의 관점을 반영합니다. 오류가 발생할 가능성이 더 높습니다.
결론적으로 MSVC가 서명/비서명 동등 비교를 조용히 수용하는 것은 통합 승격 규칙과 이러한 시나리오에 대한 컴파일러의 특정 경고 구성.
위 내용은 MSVC가 부호 있는/부호 없는 동등 비교에 대해 경고하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!