Что означает "родственные вызовы"?
В руководстве GCC,
-foptimize-одноуровневых-звонки
Оптимизируйте речевые вызовы с сестрой и хвостом.
Я знаю хвостовые рекурсивные вызовы, например
int sum (int n) {return n == 1? 1: n + sum (n-1); }
Однако, что означают вызовы братьев и сестер?
Ответы
Ответ 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()
можно заменить скачком (или встроенной функцией) вместо использования стандартного вызова функции.
Ответ 2
компилятор рассматривает две функции как братьев и сестер, если они имеют одинаковые структурная эквивалентность типов возврата, а также совмещение пространства требования их аргументов.
http://www.drdobbs.com/tackling-c-tail-calls/184401756