相关疑难解决方法(0)

使用无符号索引进行反向'for'循环的最佳方法是什么?

我第一次尝试反向for循环 n次做的事情是这样的:

for ( unsigned int i = n-1; i >= 0; i-- ) {
    ...     
}
Run Code Online (Sandbox Code Playgroud)

这是失败的,因为无符号算术 i保证总是大于或等于零,因此循环条件将始终为真.幸运的是,在我不得不想知道为什么循环无限执行之前,gcc编译器警告我"无意义的比较".


我正在寻找一种解决这个问题的优雅方法,请记住:

  1. 它应该是一个倒退的循环.
  2. 循环索引应该是无符号的.
  3. n是无符号常数.
  4. 它不应该基于无符号整数的"模糊"环算术.

有任何想法吗?谢谢 :)

c for-loop

56
推荐指数
7
解决办法
3万
查看次数

使用无符号循环变量进行反向迭代

我一直在讨论与同事一起使用size_t的问题.出现的一个问题是循环,它将循环变量递减直到达到零.

请考虑以下代码:

for (size_t i = n-1; i >= 0; --i) { ... }
Run Code Online (Sandbox Code Playgroud)

由于无符号整数环绕,这会导致无限循环.在这种情况下你做什么?编写上面的代码并没有意识到你犯了一个错误似乎很容易.

我们团队的两个建议是使用以下样式之一:

for (size_t i = n-1; i != -1 ; --i) { ... }

for (size_t i = n; i-- > 0 ; ) { ... }
Run Code Online (Sandbox Code Playgroud)

但我不知道还有其他选择......

c c++

55
推荐指数
6
解决办法
1万
查看次数

标签 统计

c ×2

c++ ×1

for-loop ×1