c - 关于循环缓冲区中简洁索引处理的建议

标签 c c99 sequence-points

我已经实现了一个循环缓冲区,并且我想要一种简洁的方法来更新缓冲区指针,同时正确处理环绕。

假设数组大小为 10,我的第一个 react 是这样的:

size_t ptr = 0;  
// do some work...
p = ++p % 10;

静态分析以及gcc -Wall -Wextra正确地惩罚了我由于序列点违规而导致的未指定行为。明显的修复类似于:

p++;
p %= 10;

但是,我一直在寻找更简洁的东西(即单行代码)来“封装​​”此操作。建议?除了p++; p%= 10; :-)

最佳答案

p = (p + 1) % N;

或者避免取模:

p = ((N-1) == p) ? 0 : (p+1);

关于c - 关于循环缓冲区中简洁索引处理的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3882343/

相关文章:

c++ - 未定义的行为和顺序点

c++ - 是否将 map 大小作为值插入到 map 未定义行为中?

c - NTP实现C

c - 同一行 C 中的 `if` 和 `while` 语句,没有明显的分支或循环

c - 理论上是否有可能实现将 unsigned int 提升为 int?

C: 将 int 转换为 size_t

c++ - 赋值运算符内的序列点

创建框中点的算法 : Box Split when there is maximum no.

c - printf 格式参数包含未定义的转义字符

c - 在 ARM 平台上,如何访问在内存中正确对齐的字符串的各个字符?