Re: Как рекурсивная функция может быть inline ?
От: folk Россия  
Дата: 15.02.04 23:22
Оценка:
Здравствуйте, 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. Быть может, это не такая уж и серьёзная и часто возникающая проблема, но я задался целью прочесть всего Страуструпа, поэтому не хотелось бы, чтобы у меня оставались "белые пятна".
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.