警告C4018('表达式':有符号/无符号不匹配)和C4389('运算符':有符号/无符号不匹配)之间有什么区别?

时间:2016-09-13 21:20:43

标签: visual-c++ compiler-warnings

那么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

我只是不明白。

1 个答案:

答案 0 :(得分:2)

最大差异是生成这些诊断消息的警告级别。 C4018是3级警告。落入你不应忽视的事情&#34;类别。只需尝试使用uc = 1和c = -1的代码,并思考1如何可能小于-1。几乎没有程序员期望这样的结果。这使它成为一个bug生成器,值得一个可见的诊断。

C4389是4级警告。落在&#34;看起来不对,但可能仍然有效&#34;类别。操作数的签名并不影响相等比较。

默认警告级别为3,除非您更改了项目设置。这让你看到&#34;不应该忽视&#34;诊断,而不是&#34;可能仍然有效#34;诊断