Принуждение VS2008 выдавать предупреждение GCC, подобное «предупреждению: сравнение между целочисленными выражениями со знаком и без знака» - PullRequest
4 голосов
/ 10 декабря 2010

В соответствии с тем, что было описано в преобразование в 'size_t' из 'int' может изменить знак результата - GCC, C , вместо этого я хотел бы убедиться, что предупреждение Iполучение в соответствии с 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 или / 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: '<': подписано/ несоответствие unsigned выдано для 32-разрядной, но не 64-разрядной компиляции под VS2008 SP1 на 64-разрядной Windows </a>.

РЕДАКТИРОВАТЬ # 2: Меня направили для публикации в Microsoft Connect из Visual C ++ Developer Center публикует , и сегодня (2011-01-11) Microsoft ответила на мой вопрос и проверила его как проблему компилятора: они заявили, что проблема будет добавлена ​​в очередь, которая будет исправлена ​​в следующем выпуске: Microsoft Connect - предупреждение C4018: '<': несоответствие со знаком или без знака генерируется только между типами одинакового размера </a>.

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

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

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

/ 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 голосов
/ 12 января 2011

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

...