Я бы сказал, что наиболее очевидным выходом из этого будет развертывание цикла:
uint8_t i = 0;
for ( i = 0; i < 32; i++ )
{
printf("Instance of loop %d\n", (8*i)+0);
printf("Instance of loop %d\n", (8*i)+1);
printf("Instance of loop %d\n", (8*i)+2);
printf("Instance of loop %d\n", (8*i)+3);
printf("Instance of loop %d\n", (8*i)+4);
printf("Instance of loop %d\n", (8*i)+5);
printf("Instance of loop %d\n", (8*i)+6);
printf("Instance of loop %d\n", (8*i)+7);
}
Теоретически это также должно быть быстрее, поскольку у вас меньше тестов и прыжков.При необходимости вы также можете развернуть более строго, чем это.
Возможно, вас заинтересует устройство Даффа (объясняет вопрос ТАК) , которое позволит вам развернуть петлю любого размера, а нетолько один с хорошими факторами.Конечно, существуют ограничения, так как для этого необходимо хранить в памяти количество того, что вам нужно, что в данном случае превышает 8-битное поле, но для циклов, скажем, 137 раз, это пригодится.
Обратите внимание, что вам не нужно выполнять этапы 8*i+1
, это просто для проверки того, что произошло достаточно событий.
Еще одно замечание: «но я не хочу писать свой код 8 раз!»можно преодолеть с помощью inline
функций (C99) или макросов (C89) при необходимости.