我第一次try 做n次事情的reverse for loop次是这样的:

for ( unsigned int i = n-1; i >= 0; i-- ) {
    ...     
}

这是fails,因为在unsigned arithmetic中,i保证总是大于或等于零,因此循环条件将始终为真.幸运的是,gcc编译器在我想知道为什么循环会无限执行之前警告了我一个"无意义的比较".


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

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

有什么 idea 吗?谢谢:)

推荐答案

不如:

for (unsigned i = n ; i-- > 0 ; )
{
  // do stuff with i
}

C++相关问答推荐

为什么这个select()会阻止?

不同到达时间的轮询实现

VS代码C/C++扩展intellisense无法检测环境特定函数'

C:scanf(%d&q;,...)输入只有一个减号

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

非常大的数组的大小

当输入负数时,排序算法存在问题

VS代码';S C/C++扩展称C23真关键字和假关键字未定义

struct -未知大小

在C++中访问双指针

平均程序编译,但结果不好

解决S随机内存分配问题,实现跨进程高效数据共享

处理来自浏览器的HTTP请求

C";中的ANN运行时判断失败#2-变量outputLayer;周围的堆栈已损坏.运行后出错

为什么会出现此错误?二进制表达式的操作数无效

区分MySQL C界面中的文本和BLOB字段

一元运算符

#define X Defined(Y) 是有效的 C/C++ 宏定义吗?

GDB 跳过动态加载器代码

保存有符号整数结果的变量是否会溢出(后增量的副作用),并且此后从未在任何表达式中使用过它,是否会导致 UB?