Я реализовал кольцевой буфер, и я хотел бы получить краткое средство обновления указателя буфера при правильной обработке циклического переноса.
Предполагая массив размером 10, мой первый ответ был примерно таким:
size_t ptr = 0;
// do some work...
p = ++p % 10;
Статический анализ, а также gcc -Wall -Wextra справедливо ударил меня по запястью за неуказанное поведение из-за нарушения точки последовательности. Очевидное исправление - это что-то вроде:
p++;
p %= 10;
Однако я искал что-то более лаконичное (то есть однострочное) для «инкапсуляции» этой операции. Предложения? Кроме p ++; р% = 10; : -)