Реализация конечного цикла без проверки условия выхода?
Главная фишка - в том. что arg / N == 0 до тех пор, пока arg < N.
Функция-итератор вызывает функцию ptr по адресу.
Адрес вычисляется по формуле "адрес функции-итератора плюс то самое выражение arg / N, умноженное на разницу адресов функции-итератора и функции-конца цикла.
Вместо банального сравнения используется математическое выражение, вот и вся хитрость.
И да, Antony прав - это не чистый цикл, а просто извращенная рекурсия.
P.S. Кстати, можно превратить это извращение и в цикл - создаем вектор адресов функций, заполняем его нужным количеством адресов функции, изменяющей переменную цикла, а в конец добавляем адрес завершающей функции. Проходим по нему, ничего не проверяя... зато без рекурсии ;))
P.P.S. Хотя вектор здесь тоже не нужен. Просто массив из двух значений и индексом - то самое выражение.
Если коротко, то в этом коде происходит дичь. :)
Этот код нельзя компилировать, он в общем случае рванет.
Опираться будем на (arg / N). Что это означает? Это означает просто целочисленное деление.
Единица в результате этой операции получится только если arg будет эквивалентен N.
Теперь обратим внимание на (int)CycleIteration. Опустим момент что писавший это человек любит "острые ощущения". Обратим внимание только на то, что тут адрес глобальной функции переводится в число.
Далее обратим наше внимание на ((int)CycleEnd - (int)CycleIteration)). Тип int тут не спроста. Функции CycleEnd и CycleIteration могут быть расположены в произвольных местах бинарного образа. Тут определяется буквальное расстояние между двумя функциями в образе. И это расстояние может быть как положительным, так и отрицательным.
А теперь собираем все вместе. Мы определяем расстояние между функциями итерации и конца и переключаемся с итерации на конец только тогда, когда счетчик итераций достигает лимита.ptr будет принимать значение CycleIteration до тех пор, пока arg < N, а когда arg == N, ptr принимает значение CycleEnd.