我在i = 2
和L = 0
的循环很少。在i
达到零后,我找到i == 18446744073709551615
并且我的循环无限期地继续。
int L = 0;
size_t i = 2;
while (i >= L) {
// do some work here
i--;
}
为什么这个循环不会终止?
答案 0 :(得分:4)
您完全不清楚您的示例中使用的类型,但是我们可能会假设您实际拥有的行为:
int L = 0;
size_t i = 2;
和循环条件
while (i >= L)
在使用i
操作的i--
下溢时失败。
这意味着您之后会18446744073709551615
中的i
值,这肯定大于0
(L
)。
unsigned
值永远不会小于0
,并且您的编译器应该向您吐出一个关于该事实的警告(取决于内置的SCA功能)。
答案 1 :(得分:2)
看起来i
是无符号整数,因此总是大于或等于零。