경고 수준/W4를 사용하는 Visual Studio 2010 C++ 컴파일러 (X86)를 사용하여 다음 C++ 프로그램을 컴파일하려고하면 다음과 같이 서명 된/서명되지 않은 불일치 경고가 발생합니다. 표시된 선.C++ : 부호없는 형식 만 사용하는 경우 부호있는/부호없는 불일치
#include <cstdio>
#include <cstdint>
#include <cstddef>
int main(int argc, char **argv)
{
size_t idx = 42;
uint8_t bytesCount = 20;
// warning C4389: '==' : signed/unsigned mismatch
if (bytesCount + 1 == idx)
{
printf("Hello World\n");
}
// no warning
if (bytesCount == idx)
{
printf("Hello World\n");
}
}
저는 부호없는 유형만을 사용하기 때문에 혼란 스럽습니다.
bytesCount == idx
은 그러한 경고가 발생하지 않습니다 비교 때문에, 아마 여기 일이 이상한 암시 적 대화를 함께 할 수있다.
따라서이 경고를받는 이유는 무엇이며 어떤 규칙에 따라이 대화가 발생합니까 (이것이 이유 일 경우)?
컴파일러에게 이러한 문제에 대해 경고하지 않는 방법, 프로그램 코드에서 비교가 안전하다는 것이 확실하다면 전체 파일에 대한 경고를 해제하고 싶지는 않지만 코드를 추하게 만들고 싶지는 않습니다. 그것을 피하십시오. 이를 달성 할 수있는 방법이 있습니까? – Arkady
@Arkady 컴파일러가 코드에 대해 경고하도록 구성되어 있으면 코드가 변경되기를 원치 않으므로 (컴파일러의 구성을 변경하지 않으려 고합니다. 경고도), 당신은 많은 옵션을 열어두고 있지 않습니다. 내가 생각할 수있는 유일한 옵션은 분석을 개선하기 위해 컴파일러를 해킹하는 것입니다. – hvd