2010-12-09 3 views
4

conversion to ‘size_t’ from ‘int’ may change the sign of the result - GCC , C에 설명 된 것과 동일한 줄을 따라 대신 GCC 4.2에서 경고를 받겠습니다. 1은 VS2008에 맞게 GCC에서 경고를 비활성화하는 것과 달리 32 비트 및 64 비트 컴파일로 VS2008 SP1 아래에 플래그가 지정됩니다. 64 비트 상태에서 GCC 4.2.1에서 예를 들어 VS2008에서 "경고 : 부호있는 및 부호없는 정수 표현식 간의 비교"와 유사한 GCC 경고를 강제로 발행합니다.

, 우리는 -Wall 조건 경고로 다음을 참조하십시오 :

#include <string.h> 
bool foo() 
{ 
    size_t len = 0; 
    const char * someBuffer = "flubber"; 
    len = strlen(someBuffer); 
    bool retval = false; 
    for (int j = 0; j < len; j++) // <-- warning 
    { 
     if (someBuffer[j] != '0') 
     { 
      retval = true; 
      break; 
     } 
    } 
    return retval; 
} 

GCC는 경고입니다

warning: comparison between signed and unsigned integer expressions 

그러나/W3 또는/W4 또는/w3 some_warning_number 또는/w4 some_warning_number 등을 사용하여 어떤 유형의 플러그 인을 사용할 수 있는지에 관계없이 VS2008 SP1 64 비트 컴파일러에서 플래그를 지정하지 않습니다.

GCC의 경고 수준을 낮추거나 경고를 사용하지 않으려는 이유가 있습니다. 아주 좋은 이유로 경고가 있었기 때문입니다. 그래서/WX를 사용할 때 비슷한 방식으로 VS 빌드가 실패하고 싶습니다. 이게 내가 살아야하는 것입니까, 아니면 VS2008에서 트릭을 할 것이라는 경고가 있습니까?

EDIT : 경고 32 비트 빌드하지만 컴파일러 옵션의 동일한 세트를 이용하여, 64 비트 빌드 사용하지 위해 도시 아래와 :

/O2 
/Ob2 
/D "WIN32" 
/D "_WINDOWS" 
/D "NDEBUG" 
/D "_CRT_SECURE_NO_WARNINGS" 
/D "__WIN32__" 
/D "_SCL_SECURE_NO_WARNINGS" 
/D "_BIND_TO_CURRENT_MFC_VERSION" 
/D "_BIND_TO_CURRENT_CRT_VERSION" 
/D "WINVER=0x0502" 
/D "_WIN32_WINNT=0x0502" 
/D "_WIN32" 
/D "_NT" 
/D "_CRT_NONSTDC_NO_WARNINGS" 
/D "_MBCS" 
/FD 
/EHsc 
/MD 
/W3 
/WX 
/TP 
/Zm1000 

EDIT 1 :이로 보는 것이있을 Visual Studio의 특이점, Visual C++ Developer Center - warning C4018: '<' : signed/unsigned mismatch is emitted for 32-bit but not 64-bit compilation under VS2008 SP1 on 64-bit Windows에 게시했습니다.

EDIT # 2 : Visual C++ Developer Center posting에서 Microsoft Connect에 게시되었으며 오늘 (2011-01-11) Microsoft가 내 질문에 답하고 컴파일러 문제로 확인했습니다. 문제가 추가 될 것이라고 언급했습니다. 향후 릴리스에서 수정 될 백 로그 : Microsoft Connect - warning C4018: '<' : signed/unsigned mismatch is only emitted between like-sized types.

답변

0

내 질문에 답하기 : 원래 질문 영역에서 내 수정 2를 참조하십시오. 이제는 Microsoft에서 컴파일러 문제로 인정합니다.

1

코드 줄이 잘못되어 원하는 "C4018 경고 : < : 서명/서명되지 않은 불일치"가 생성되어야합니다.

여기, 내 테스트 프로젝트 컴파일러 설정의 경우에 모든 도움 :

/OD/D "WIN32"/ D "_DEBUG"/ D "_CONSOLE"/ D "_UNICODE"/ D "유니 코드"/ GM의/W3/nologo/c/ZI/TP/errorReport :/EHsc/RTC1/MDd/Yu "stdafx.h"/Fp"Debug\testproj1.pch "/ Fo"디버그 "/Fd"Debug\vc90.pdb" 프롬프트

편집 : 이것은 32 비트 Visual Studio에서 테스트되었지만 64 비트 컴파일에 대해 묻는 것이므로이 정보는 나와 관련이 없습니다.

+0

예, 32 비트 빌드에서는 경고가 표시되지만 64 비트 빌드에서는 경고가 표시되는 것 같습니다. – bgoodr

+0

나는 당신이 발견 한 내용을 포함하도록 주요 질문을 편집했고 내가 사용한 컴파일 라인 옵션을 열거했습니다. – bgoodr

관련 문제