使用8位无符号整数变量作为计数器循环超过256个值

所以我只想用连续数字0-255来填充缓冲区。 我对此并没有多想,最终陷入了无限循环。

uint8_t i; uint8_t txbuf[256]; for (i=0; i<256; i++) { txbuf[i] = i; } 

问题是i永远不会是256,因为它在255之后翻到零。

我的问题是,有没有办法做这个循环而不会使i达到16位值?

注意:我知道我可以将循环更改为i<255并为最终位置添加另一条线,但我正在试图找出一种更好看的方式。

 uint8_t txbuf[256]; uint8_t i = 0; do { txbuf[i] = i; } while (i++ != 255); 

要么

 uint8_t txbuf[256]; uint8_t i = 255; do { txbuf[i] = i; } while (i--); 

使用do ... while循环,以便在检查条件之前执行操作:

 uint8_t i = 0; uint8_t txbuf[256]; do { txtbuf[i] = i; } while(i++ < 255); 

其他答案中的do..while循环可能就是你想要的,但是如果你特意想要使用for循环,你可以添加一个break语句:

 uint8_t i; uint8_t txbuf[256]; int main(void) { for (i=0; ; i++) { txbuf[i] = i; if (i == 255) break; } } 

uint8_t范围是0-255所以它永远不会变成256.因为我们看到你的数组也是uint8_t类型,它可以存储的值也是0-255所以是什么让你循环大于255的值呢?

只需保持检查为i<255 ,当您退出循环时,您知道i的值为255,请相应地使用它。

如其他人所建议的那样使用。

以下gcc(5.0)具有检查是否发生溢出的function。

 uint8_t i = 0; uint8_t txbuf[256]; do { txbuf[i] = i; }while(!__builtin_add_overflow(i,1,i)); 

有关详细信息, 请访问https://gcc.gnu.org/gcc-5/changes.html