当前位置:  开发笔记 > 编程语言 > 正文

我应该禁用C编译器签名/未签名的不匹配警告吗?

如何解决《我应该禁用C编译器签名/未签名的不匹配警告吗?》经验,为你挑选了2个好方法。

当您尝试比较两个变量时,Microsoft C编译器会发出警告,其中一个是有符号的,另一个是无符号的.例如:

int a;    
unsigned b;

if ( a < b ) { // warning C4018: '<' : signed/unsigned mismatch

}

在世界历史上,这个警告是否曾经发现了一个真正的错误?无论如何,为什么呢?



1> Marko..:

永远不要忽略编译器警告.


MSVC曾经发出一堆警告,因为我包含了STL的某些部分.我认为已经训练了许多开发人员来禁用警告或忽略它们,即使MS已经修复它.

2> Johannes Sch..:

哦,它有.但反过来说.有一天,忽略那个警告给我带来了巨大的麻烦.我正在编写一个绘制图形的函数,并混合有符号和无符号变量.在一个地方,我将负数与无符号数进行比较:

int32_t t; ...
uint32_t ut; ...

if(t < ut) { 
    ...
}

猜猜发生了什么?已签名的数字被提升为无符号类型,因此最终更大,即使它最初低于0.我花了几个小时才找到了这个bug.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有