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