Pertama, inline
spesifikasi suatu fungsi hanyalah petunjuk. Kompilator dapat (dan sering kali) mengabaikan sepenuhnya ada atau tidaknya sebuah inline
qualifier. Dengan demikian, kompilator dapat menyebariskan fungsi rekursif, seperti halnya ia dapat membuka gulungan loop tak terbatas. Ini hanya harus menempatkan batas pada tingkat yang akan "membuka" fungsi.
Kompilator yang mengoptimalkan mungkin mengubah kode ini:
inline int factorial(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * factorial(n - 1);
}
}
int f(int x)
{
return factorial(x);
}
ke dalam kode ini:
int factorial(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * factorial(n - 1);
}
}
int f(int x)
{
if (x <= 1)
{
return 1;
}
else
{
int x2 = x - 1;
if (x2 <= 1)
{
return x * 1;
}
else
{
int x3 = x2 - 1;
if (x3 <= 1)
{
return x * x2 * 1;
}
else
{
return x * x2 * x3 * factorial(x3 - 1);
}
}
}
}
Dalam kasus ini, pada dasarnya kita telah membuat inline fungsinya 3 kali. Beberapa compiler melakukan melakukan optimasi ini. Saya ingat MSVC ++ memiliki pengaturan untuk menyetel tingkat sebaris yang akan dilakukan pada fungsi rekursif (hingga 20, saya percaya).