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