我已经实现了一个循环缓冲区,我想要一种简洁的方法来更新缓冲区指针,同时正确处理环绕。
假设一个大小为 10 的数组,我的第一反应是这样的:
size_t ptr = 0;
// do some work...
p = ++p % 10;
静态分析以及gcc -Wall -Wextra正确地拍打了我的手腕,因为由于序列点违规而导致的未指定行为。明显的修复是这样的:
p++;
p %= 10;
但是,我一直在寻找更简洁的东西(即单线)来“封装”这个操作。建议?除了p++;p%= 10;:-)