Ste*_*nov 15 c compiler-construction warnings
当您尝试比较两个变量时,Microsoft C编译器会发出警告,其中一个是有符号的,另一个是无符号的.例如:
int a;
unsigned b;
if ( a < b ) { // warning C4018: '<' : signed/unsigned mismatch
}
Run Code Online (Sandbox Code Playgroud)
在世界历史上,这个警告是否曾经发现了一个真正的错误?无论如何,为什么呢?
Joh*_*itb 24
哦,它有.但反过来说.有一天,忽略那个警告给我带来了巨大的麻烦.我正在编写一个绘制图形的函数,并混合有符号和无符号变量.在一个地方,我将负数与无符号数进行比较:
int32_t t; ...
uint32_t ut; ...
if(t < ut) {
...
}
Run Code Online (Sandbox Code Playgroud)
猜猜发生了什么?已签名的数字被提升为无符号类型,因此最终更大,即使它最初低于0.我花了几个小时才找到了这个bug.
| 归档时间: |
|
| 查看次数: |
5650 次 |
| 最近记录: |