Принуждение VS2008 выдать предупреждение GCC, похожее на «предупреждение:сравнение между знаковыми и беззнаковыми целочисленными выражениями»

StackOverflow https://stackoverflow.com/questions/4404007

Вопрос

В том же духе, что и описано в преобразование в «size_t» из «int» может изменить знак результата — GCC, C, Вместо этого я хотел бы гарантировать, что предупреждение, которое я получаю в GCC 4.2.1, также помечается в VS2008 SP1 как при 32-битной, так и при 64-битной компиляции, а не при отключении предупреждений в GCC для соответствия VS2008.

Например, в GCC 4.2.1 в 64-битных условиях мы видим следующее предупреждение в условиях -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

Но он не помечается 64-разрядным компилятором VS2008 SP1, независимо от того, какие типы прагм я использую и что я включаю, используя /W3, /W4 или /w3.some_warning_number или /w4some_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:'<' :Несоответствие знака/беззнака выдается для 32-битной, но не 64-битной компиляции под VS2008 SP1 в 64-битной Windows.

РЕДАКТИРОВАТЬ № 2:Мне было предложено опубликовать сообщение в Microsoft Connect из Публикация в Центре разработчиков Visual C++, и сегодня (11 января 2011 г.) Microsoft ответила на мой вопрос и подтвердила, что это проблема компилятора:Они заявили, что проблема будет добавлена ​​в список невыполненных работ и будет исправлена ​​в будущем выпуске: Microsoft Connect — предупреждение C4018:'<' :несоответствие со знаком/без знака возникает только между типами одинакового размера.

Это было полезно?

Решение 2

Отвечая на мой собственный вопрос:См. мое РЕДАКТИРОВАНИЕ № 2 в исходной области вопроса.Теперь Microsoft признает это проблемой компилятора.

Другие советы

Что-то пошло не так, эта строка кода должна и будет генерировать желаемое «предупреждение C4018:'<' :несоответствие знака/беззнака».

Вот настройки компилятора моего тестового проекта, если они вообще помогают:

/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"Debug estproj1.pch /Fo"Debug\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

РЕДАКТИРОВАТЬ:это проверено в 32-битной Visual Studio, но вы спрашиваете о 64-битной компиляции, поэтому эта информация для вас не актуальна, извините.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top