Что означает «родные звонки»? имею в виду?

В руководстве GCC,

-foptimize-одноуровневые-звонки

Оптимизация родственных и рекурсивных вызовов.

Я знаю хвостовые рекурсивные вызовы, например

int sum (int n) {return n == 1? 1: n + сумма (n-1); }

Тем не менее, что означает родственные вызовы?

13

Решение

Это должно быть что-то вроде этого:

int ispair(int n) { return n == 0 ? 1 : isodd(n-1); }
int isodd(int n) { return n == 0 ? 0 : ispair(n-1); }

В общем случае, если вызов функции является последним предложением, его можно заменить прыжком.

void x() { ......; y(); }

В этом случае y() может быть заменен переходом (или встроенной функцией) вместо использования стандартного вызова функции.

4

Другие решения

компилятор
считает две функции братьями и сестрами, если они имеют одинаковые
структурная эквивалентность возвращаемых типов, а также соответствие пространства
Требования их аргументов.

http://www.drdobbs.com/tackling-c-tail-calls/184401756

4

По вопросам рекламы [email protected]