Thr*_*986 2 c c99 sequence-points
我已经实现了一个循环缓冲区,我想要一个简洁的方法来更新缓冲区指针,同时正确处理环绕.
假设一个大小为10的数组,我的第一个响应是:
size_t ptr = 0;
// do some work...
p = ++p % 10;
Run Code Online (Sandbox Code Playgroud)
静态分析,以及gcc -Wall -Wextra,由于序列点违规而正确地拍了我的手腕以查找未指定的行为.明显的修复方法如下:
p++;
p %= 10;
Run Code Online (Sandbox Code Playgroud)
然而,我正在寻找更简洁的东西(即一个单行)来"封装"这个操作.建议?除了p ++之外; p%= 10; :-)
p = (p + 1) % N;
Run Code Online (Sandbox Code Playgroud)
或者避免使用模数:
p = ((N-1) == p) ? 0 : (p+1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |