【发布时间】:2010-09-09 16:14:31
【问题描述】:
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
【问题讨论】:
-
我没有意识到有一个#pragma 可以打开警告。 #pragma 的问题在于它需要在您想要警告的每个模块中重复。
标签: c++ c visual-studio