那么C4018 ('expression' : signed/unsigned mismatch)和C4389 ('operator' : signed/unsigned mismatch)警告之间有什么区别?
unsigned int uc = 0;
int c = 0;
if (uc < c) uc = 0; // C4018
VS
int a = 9;
unsigned int b = 10;
if (a == b) // C4389
我只是不明白。
答案 0 :(得分:2)
最大差异是生成这些诊断消息的警告级别。 C4018是3级警告。落入你不应忽视的事情&#34;类别。只需尝试使用uc = 1和c = -1的代码,并思考1如何可能小于-1。几乎没有程序员期望这样的结果。这使它成为一个bug生成器,值得一个可见的诊断。
C4389是4级警告。落在&#34;看起来不对,但可能仍然有效&#34;类别。操作数的签名并不影响相等比较。
默认警告级别为3,除非您更改了项目设置。这让你看到&#34;不应该忽视&#34;诊断,而不是&#34;可能仍然有效#34;诊断