В руководстве GCC,
-foptimize-одноуровневые-звонки
Оптимизация родственных и рекурсивных вызовов.
Я знаю хвостовые рекурсивные вызовы, например
int sum (int n) {return n == 1? 1: n + сумма (n-1); }
Тем не менее, что означает родственные вызовы?
Это должно быть что-то вроде этого:
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()
может быть заменен переходом (или встроенной функцией) вместо использования стандартного вызова функции.
компилятор
считает две функции братьями и сестрами, если они имеют одинаковые
структурная эквивалентность возвращаемых типов, а также соответствие пространства
Требования их аргументов.