我已经实现了一个循环缓冲区,并且我想要一种简洁的方法来更新缓冲区指针,同时正确处理环绕。
假设数组大小为 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/