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
最佳答案
您需要启用警告 4365 才能捕获分配。
这可能很棘手 - 您需要启用所有警告 - 使用/Wall 启用大量警告,因此您可能很难看到警告发生,但它确实发生了。
关于c++ - 让 VS 编译器捕捉有符号/无符号的赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75385/