在非常小的循环中出错

Error in very little loop

本文关键字:出错 循环 非常      更新时间:2023-10-16

我有很少的循环,i = 2L = 0i达到零后,我找到i == 18446744073709551615,我的循环无限期地继续。

int L = 0;
size_t i = 2;
while (i >= L) {
  // do some work here
  i--;
}

为什么这个循环不终止?

您让我们完全不清楚样本中使用的类型,但从行为来看,我们可能会假设您实际上具有:

int L = 0;
size_t i = 2;

和循环条件

while (i >= L)

i--操作的下溢i失败。

这意味着之后您将在i中得到18446744073709551615值,该值肯定大于0L)。

unsigned值永远不会小于0,你的编译器应该把关于这个事实的警告吐到你的脸上(取决于内置的SCA功能)。

看起来i是一个无符号整数,因此,总是大于或等于零。