Рассмотрим классический способ определения факториала:Force встраивание рекурсивной функции
#include <stdio.h>
__attribute__((always_inline)) inline int factorial(int n)
{
if (n == 1){
return 1;
} else {
return n * factorial(n - 1);
}
}
int main()
{
printf("value %d", factorial(7/*guaranteed to not overflow int*/));
}
Я принуждая мой компилятор (GCC) встраивать функцию факториала. То, что должно вызвать проблему. gcc игнорирует мою силу inline без ошибок. Ожидается ли это?
Рекурсивная функция не может быть встроенными функциями. Я думаю, что компилятор игнорирует ваш «атрибут» из-за этого – Astinog
@Agostino: Если вы читаете вопрос, OP это знает, поэтому он спросил об этом ... – Melkon
Поскольку вы назвали factorial с константой, откуда вы ее знаете не было включено? Я не знаю, является ли gcc таким умным. Когда я тестировал icc много лет (и версии назад), это было не так уж и умно (такая оптимизация констант произошла после, а не смешанная с inlining). Но, возможно, gcc теперь умнее, чем icc. – JSF