В соответствии с тем, что было описано в преобразование в '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>.