Может ли рекурсивная функция быть встроенной?
Действительно, если ваш компилятор cxx не действует разумно, он compiler может попытаться рекурсивно compiler-construction вставить копии вашей функции c inline
d, создавая бесконечно большой compiler-construction код. Однако большинство современных compiler-design компиляторов распознают это. Они compiler могут либо:
- Вообще не встраивать функцию
- Встраивайте его до определенной глубины, и если он к тому времени не завершится, вызовите отдельный экземпляр вашей функции, используя стандартное соглашение о вызове функции. Это может позаботиться о многих распространенных случаях с высокой производительностью, оставив запасной вариант для редкого случая с большой глубиной вызовов. Это также означает, что вы храните как встроенные, так и отдельные версии кода этой функции.
Для случая 2 многие compiler компиляторы имеют #pragma
, которые compiler-design вы можете установить, чтобы cxx указать максимальную глубину, до compiler-design которой это должно быть сделано. В cpp gcc вы также можете передать c++ это из командной строки с c++ помощью --max-inline-insns-recursive
(см. дополнительную cpp информацию here).
c++
c
compiler-construction
Может ли рекурсивная функция быть встроенной?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.