Здравствуйте, Forrest_Gump, Вы писали:
F_G>Бьерн Страуструп "Язык программирования С++" 3-е издание, стр. 186, п. 7.1.1 "Определения функций".
F_G>Сначала приводится пример:
F_G>F_G>inline int fac(int n) {return (n < 2) ? 1 : n * fac(n-1); }
F_G>
F_G>а потом написано следующее:
F_G>F_G>В виду допустимости рекурсивных и взаимно рекурсивных встроенных функций, невозможно гарантировать, что в месте каждого вызова такой функции будет действительно осуществлено встраивание кода функции.
F_G>Поясните, пожалуйста, КАК рекурсивная функция вообще может быть встраиваемой ?
F_G>Каким же будет тогда механизм её вызова ?
F_G>Кстати, в Visual C++ 6 SP5 я создал такой файл:
А если попробовать так?
F_G>
#pragma inline_recursion(on)
F_G>inline int fac(int n) {return (n < 2) ? 1 : n * fac(n-1); }
F_G>int main(){
F_G> fac(6);
F_G> return 0;
F_G>}
F_G>
[]
F_G>[/asm]
F_G>То есть встраивания не произошло, как я и ожидал
F_G>P.S. Быть может, это не такая уж и серьёзная и часто возникающая проблема, но я задался целью прочесть всего Страуструпа, поэтому не хотелось бы, чтобы у меня оставались "белые пятна".
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн