Лично я бы делал if.
В отрыве от
предположений об аппаратном множителе и т.д. - операция % дороже сравнения!
Вам тут уже подсказали вариант
Цитата
#define ncell(m) (sizeof(m) / sizeof((m)[0])) //кол-во элементов массива m
int ix; //индекс
char buf[N];
if (--ix < 0) ix += ncell(buf);
Я голосую за него.
Так же в плане оптимальности не забывайте, что сравнение с нулем в 90% выгоднее сравнения с любым другим числом.
Об этом даже Александреску в своих лекциях не раз рассказывал. Ибо 0 всегда где-то есть. Либо есть отдельная инструкция для теста на 0 либо в регистре где-то уже есть 0 и компилятор его подсунет в операцию. А любое другое число придется сначала куда-то положить, а потом сравнить. 0 - ваш лучший друг, говорил Александреску и я с ним полностью согласен
The truth is out there...