为什么如果(-1 < 0) comparision fails in c (sometimes)?

问题描述 投票:0回答:1

我在我的 c 文件中声明了

size_t file_size;
变量,稍后将
-1
分配给它,然后当我这样做时

if(file_size < 0) {
  // do something
} else {
  printf("C is confusing\n");
}
output: C is confusing

但是如果我将条件设置为

if(file_size == -1) {
  printf("C is easy\n");
} else {
  // do something
}
output: C is easy

有人可以解释一下为什么这种情况发生的可能性很小吗?预先感谢!

c integer compare size-t
1个回答
0
投票

这两种情况都与

size_t
无符号这一事实有关,即它只能表示非负值。

第一种情况:
既然是

unsigned
,就永远不可能是
< 0

第二种情况:
当你与

-1
进行比较时,
-1
实际上被转换为无符号值,因此相等是可行的。

如果您想正确表示负值,请使用

ssize_t
而不是
size_t

© www.soinside.com 2019 - 2024. All rights reserved.