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;
}
更新:
Quamrana是正確的,這是由警告4365這似乎在默認情況下處於關閉狀態,甚至在W4控制。但是,您可以像這樣明確地爲其給定的警告級別啓用它;
#pragma warning (4 : 4365)
其中導致;
warning C4365: 'initializing' : conversion from 'unsigned int' to 'int', signed/unsigned mismatch
我沒有意識到有一個#pragma來打開警告。 #pragma的問題在於需要在需要警告的每個模塊中重複該問題。 – quamrana 2008-09-16 21:52:55