Добрый день. Вопрос чисто академический, но не даёт мне покоя.
Наткнулся на спор по поводу того, возможно ли реализовать конечный цикл так, чтобы в скомпилированном коде не было ни одной проверки условия.
Вроде как, по итогу родился следующий пример (С++). Примерно, как это работает, я понял, однако много непонятного.
Кто-нибудь может объяснить, что именно происходит в этой строчке:
void (*ptr)(int) =(void (*)(int)) ((int)CycleIteration + (arg / N) * ((int)CycleEnd - (int)CycleIteration));
Весь пример:
#include <stdio.h>
#include <stdlib.h>
int N = 0;
void CycleEnd(int arg)
{
printf("cycle is finished, N = %d ", arg);
}
void CycleIteration(int arg)
{
printf("%d\n", arg);
void (*ptr)(int) =(void (*)(int)) ((int)CycleIteration + (arg / N) * ((int)CycleEnd - (int)CycleIteration));
ptr(arg + 1);
}
void cycleBegin(int iteratorStartValue, int iteratorEndValue)
{
N = iteratorEndValue - 1;
CycleIteration(iteratorStartValue);
}
int main()
{
cycleBegin(0, 100);
}