এই পোস্টে, আমরা সি++-এ ইনলাইন (Inline) এবং ম্যাক্রো (Macro)-এর মধ্যে পার্থক্য বুঝব।
ইনলাইন (Inline)
- এটি সি++-এ একটি ফাংশন।
- এটি কম্পাইলার দ্বারা পার্স (parse) করা হয়।
- এটি ক্লাসের ভিতরে বা বাইরে ডিফাইন করা যায়।
- এটি আর্গুমেন্টগুলো শুধু একবার ইভ্যালুয়েট (evaluate) করে।
- কম্পাইলার সব ফাংশনকে 'ইনলাইন' ফাংশনে রূপান্তর করে এক্সপ্যান্ড (expand) করবে না।
- ক্লাসের ভিতরে ডিফাইন করা ছোট ফাংশনগুলো অটোমেটিক্যালি ইনলাইন ফাংশন হয়ে যায়।
- একটি ক্লাসের ভিতরে ইনলাইন ফাংশন সেই ক্লাসের ডেটা মেম্বার অ্যাক্সেস করতে পারে।
- ইনলাইন ফাংশন কার্লি ব্র্যাকেট (curly brackets) দিয়ে টার্মিনেট করা হয়।
- এটি ডিবাগ (debug) করা সহজ।
- কারণ কম্পাইলেশন সময়েই এরর চেকিং (error checking) হয়।
- এটি ফাংশন বডির সব স্টেটমেন্ট বাইন্ড (bind) করে।
উদাহরণ
inline return_type funct_name ( parameters ) { . . . }
ম্যাক্রো (Macro)
- এটি প্রিপ্রসেসর (preprocessor) দ্বারা এক্সপ্যান্ড করা হয়।
- এটি প্রোগ্রামের শুরুতে ডিফাইন করা হয়।
- এটি কোডের ভিতরে যতবার ব্যবহার করা হয়, আর্গামেন্টগুলো ততবার ইভ্যালুয়েট করা হয়।
- সেগুলো সবসময় এক্সপ্যান্ড করা হয়।
- সেগুলো স্পেসিফিক্যালি ডিফাইন করতে হয়।
- সেগুলো কখনো ক্লাসের মেম্বার হয় না।
- সেগুলো ক্লাসের ডেটা মেম্বার অ্যাক্সেস করতে পারে না।
- ম্যাক্রোর ডেফিনিশন নিউ লাইন (new line) দিয়ে শেষ হয়।
- ম্যাক্রো ডিবাগ করা কঠিন কারণ কম্পাইল টাইমে এরর চেকিং হয় না।
- একাধিক স্টেটমেন্ট থাকলে বাইন্ডিং সমস্যা হয় কারণ এর কোনো টার্মিনেশন সিম্বল নেই।
উদাহরণ
#define macro_name char_sequence