Компилятор Visual Studio, похоже, не предупреждает о подписанных/неподписанных назначениях, только при сравнении. Например, приведенный ниже код будет генерировать предупреждение для оператора if, но не для первоначальных назначений.Сделать компилятор VS компиляцией подписанных/неподписанных заданий?
Есть ли все равно, чтобы заставить их поймать их? Я уже в W4, но думал (надеется), что где-то может быть другая настройка.
Спасибо,
int foo(void)
{
unsigned int fooUnsigned = 0xffffffff;
int fooSigned = fooUnsigned; // no warning
if (fooSigned < fooUnsigned) // warning
{
return 0;
}
return fooSigned;
}
Update:
Quamrana прав, это контролируется предупредив 4365, который, как представляется, будет отключена по умолчанию, даже при W4. Однако вы можете явно включить его для заданного уровня предупреждения;
#pragma warning (4 : 4365)
Какой результат;
warning C4365: 'initializing' : conversion from 'unsigned int' to 'int', signed/unsigned mismatch
Я не знал, что есть # прагма для включения предупреждений. Проблема с #pragma заключается в том, что ее необходимо повторять в каждом модуле, где вы хотите получить предупреждение. – quamrana 2008-09-16 21:52:55