2010-12-09 77 views
4

conversion to ‘size_t’ from ‘int’ may change the sign of the result - GCC , C中描述的内容一样,我反而希望确保在GCC 4.2下收到警告。 1在VS2008 SP1下同时在32位和64位编译下标记,与禁用GCC下的警告以适应VS2008。强制VS2008发出类似于“警告:有符号整数表达式和无符号整数表达式之间的比较”的GCC警告

例如,64位的条件下,下GCC 4.2.1中,我们看到作为警告-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 

但它不会被VS2008 SP1 64位编译器标记,无论我尝试使用什么类型的编译指示,无论我使用/ W3还是/ W4,还是/ w3 some_warning_number或/ w4 some_warning_number等等。

现在,我不想贬低GCC的警告级别或禁用警告,因为他们有很好的理由在那里的警告。所以我希望在启用/ WX时VS构建以类似的方式失败。这是我必须忍受的,还是有一些警告会在VS2008上做到这一点?

编辑:警告显示出来的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。编辑#2:我被指示从Visual C++ Developer Center posting和今天(2011-01-11)发布到Microsoft Connect,微软回答了我的问题,并将其验证为编译器问题:他们表示将添加该问题到未来版本中的待办事项:Microsoft Connect - warning C4018: '<' : signed/unsigned mismatch is only emitted between like-sized types

回答

0

回答我自己的问题:在原始问题区域查看我的编辑#2。它现在被微软视为编译器问题。

1

出错了,该行代码应该会生成所需的“warning C4018:'<':signed/unsigned mismatch”。

这里是我的测试项目的编译器设置,如果这些帮助都:

/OD/d “WIN32”/ d “_DEBUG”/ d “_CONSOLE”/ d “_UNICODE”/ d “UNICODE”/ GM/EHsc/RTC1/MDd /Yu"stdafx.h“/Fp"Debug\testproj1.pch”/ Fo“Debug \”/Fd"Debug\vc90.pdb“/ W3/nologo/c/ZI/TP/errorReport:提示

编辑:这与32位Visual Studio测试,但你问的64位编译,所以这个信息是不相关的你,我的赦免。

+0

是的,你是对的,它似乎显示在32位构建但不是在64位构建下的警告。 – bgoodr 2010-12-11 01:45:58

相关问题