4

与从 'int' 转换为 'size_t'中描述的内容相同,可能会改变结果的符号 - GCC , C,我想确保我在 GCC 4.2.1 下收到的警告也被标记在 32 位和 64 位编译下的 VS2008 SP1 下,而不是在 GCC 下禁用警告以适应 VS2008。

例如,在 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 的警告级别或禁用警告,因为他们有很好的理由在那里发出警告。所以我希望 VS 构建在启用 /WX 时以类似的方式失败。这是我必须忍受的事情,还是有一些警告可以在 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

编辑#1:看到这可能是 Visual Studio 的特质,我发布到Visual C++ 开发人员中心 - 警告 C4018: '<' : signed/unsigned mismatch isemitting for 32-bit but not 64-bit compiler under VS2008 SP1 on 64位窗口

编辑#2:我被指示从Visual C++ 开发人员中心发布到 Microsoft Connect ,今天(2011-01-11)微软回复了我的问题并将其验证为编译器问题:他们表示该问题将添加待在未来版本中修复的积压工作:Microsoft Connect - 警告 C4018: '<' : signed/unsigned mismatch is only sent between like-sized types

4

2 回答 2

1

出了点问题,那行代码应该并且将生成所需的“警告 C4018:'<':有符号/无符号不匹配”。

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

/Od /D "WIN32" /D "_D​​EBUG" /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:prompt

编辑:这是用 32 位 Visual Studio 测试的,但你问的是 64 位编译,所以这个信息与你无关,对不起。

于 2010-12-10T01:29:22.183 回答
0

回答我自己的问题:在原始问题区域中查看我的 EDIT #2。它现在被 Microsoft 识别为编译器问题。

于 2011-01-12T00:53:34.460 回答