সি++ ইনলাইন ফাংশন (inline function) একটি শক্তিশালী কনসেপ্ট যা সাধারণত ক্লাসের সাথে ব্যবহার করা হয়। যদি একটি ফাংশন ইনলাইন হয়, তবে কম্পাইলার সেই ফাংশনের কোডের একটি কপি প্রতিটি পয়েন্টে রাখে যেখানে কম্পাইল টাইমে ফাংশনটি কল করা হয়।
ইনলাইন ফাংশনে যেকোনো পরিবর্তন আনে সেটির সব ক্লায়েন্টকে রিকম্পাইল করতে বাধ্য করতে পারে কারণ কম্পাইলারকে আবার সব কোড রিপ্লেস করতে হবে, অন্যথায় পুরনো ফাংশনালিটি চালু থাকবে।
একটি ফাংশনকে ইনলাইন করার জন্য, ফাংশন নামের আগে inline কীওয়ার্ড দিয়ে ফাংশনটি ডিফাইন করতে হয় এবং ফাংশনটি কোনো কল হওয়ার আগে ডিফাইন করা উচিত। কম্পাইলার inline কোয়ালিফায়ারকে উপেক্ষা করতে পারে যদি ডিফাইন করা ফাংশন এক লাইনের বেশি হয়।
একটি ক্লাস ডেফিনিশন內ের ফাংশন ডেফিনিশন হল একটি ইনলাইন ফাংশন ডেফিনিশন, এমনকি inline স্পেসিফায়ার ছাড়াও।
নিচে একটি উদাহরণ দেওয়া হলো, যা ইনলাইন ফাংশন ব্যবহার করে দুটি সংখ্যার মধ্যে বড়টি রিটার্ন করে:
উদাহরণ
#include <iostream> using namespace std; inline int Max(int x, int y) { return (x > y)? x : y; } // প্রোগ্রামের জন্য মেইন ফাংশন int main() { cout << "Max (20,10): " << Max(20,10) << endl; cout << "Max (0,200): " << Max(0,200) << endl; cout << "Max (100,1010): " << Max(100,1010) << endl; return 0; }
আউটপুট
Max (20,10): 20 Max (0,200): 200 Max (100,1010): 1010
এখন দেখি, আমাদের কোডে ইনলাইন ফাংশন ব্যবহার করার সুবিধাগুলো কী কী:
এখানে ফাংশন কল ওভারহেড (function call overhead) হয় না।
ফাংশন কল হলে স্টকে পুশ (push) এবং পপ (pop) ভেরিয়েবল করার ওভারহেড বাঁচায়।
ফাংশন থেকে রিটার্ন কল (return call) করার ওভারহেড বাঁচায়।
যখন একটি ইনলাইন ফাংশন তৈরি হয়, কম্পাইলার সেই ফাংশনের বডিতে কনটেক্সট-স্পেসিফিক অপ্টিমাইজেশন (context specific optimization) করতে পারে। এই ধরনের অপ্টিমাইজেশন সাধারণ ফাংশনগুলোর জন্য করা হয় না।
ছোট ইনলাইন ফাংশন ব্যবহার এম্বেডেড সিস্টেমের জন্য উপকারী হতে পারে, কারণ ইনলাইন ফাংশন কল প্রیم্বল (preamble) এবং রিটার্নের চেয়ে কম কোড জেনারেট করতে পারে।