सबसे पहले, inline
एक फ़ंक्शन पर विनिर्देश केवल एक संकेत है। कंपाइलर (और अक्सर करता है) एक inline
क्वालीफायर की उपस्थिति या अनुपस्थिति को पूरी तरह से अनदेखा कर सकता है । उस के साथ, एक संकलक एक पुनरावर्ती कार्य को इनलाइन कर सकता है , जितना कि यह एक अनंत लूप को नियंत्रित कर सकता है। इसे बस उस स्तर पर एक सीमा रखनी है, जिस पर यह फ़ंक्शन को "अनियंत्रित" करेगा।
एक अनुकूलन कंपाइलर इस कोड को चालू कर सकता है:
inline int factorial(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * factorial(n - 1);
}
}
int f(int x)
{
return factorial(x);
}
इस कोड में:
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);
}
}
}
}
इस मामले में, हमने मूल रूप से फ़ंक्शन को 3 बार इनलाइन किया है। कुछ कंपाइलर इस अनुकूलन को करते हैं। मुझे याद है कि MSVC ++ आवर्ती कार्यों (20 तक, मुझे विश्वास है) पर होने वाले इनलाइनिंग के स्तर को ट्यून करने के लिए एक सेटिंग है।