কম্পিউটার টিউটোরিয়াল

C++-এ ভেরিয়েবল সংখ্যক আর্গুমেন্ট (Variable Arguments)


কখনও কখনও আপনি এমন পরিস্থিতিতে পড়তে পারেন, যখন আপনি একটি ফাংশন চান যেটি ভেরিয়েবল সংখ্যক আর্গুমেন্ট নিতে পারে, অর্থাৎ প্রিডিফাইন্ড সংখ্যক প্যারামিটারের বদলে। C/C++ প্রোগ্রামিং ল্যাঙ্গুয়েজ এই পরিস্থিতির জন্য সমাধান দিয়েছে এবং আপনাকে এমন ফাংশন ডিফাইন করার অনুমতি দেয় যা আপনার প্রয়োজন অনুযায়ী ভেরিয়েবল সংখ্যক প্যারামিটার এক্সেপ্ট করতে পারে। নিচের উদাহরণটি এমন ফাংশনের ডেফিনিশন দেখাচ্ছে।

int func(int, ... ) { ... } 
int main() { 
    func(1, 2, 3); 
    func(1, 2, 3, 4); 
}

নোট করুন যে func() ফাংশনের লাস্ট আর্গুমেন্ট এলিপসিস, অর্থাৎ তিনটি ডট (...) এবং তার ঠিক আগেরটি সবসময় একটি int যা পাস করা ভেরিয়েবল আর্গুমেন্টের মোট সংখ্যা রিপ্রেজেন্ট করে। এই ফাংশনালিটি ব্যবহার করতে, আপনাকে stdarg.h হেডার ফাইল ব্যবহার করতে হবে যা ফাংশন এবং ম্যাক্রো দিয়ে ভেরিয়েবল আর্গুমেন্টের ফাংশনালিটি ইমপ্লিমেন্ট করে এবং নিচের ধাপগুলো ফলো করতে হবে -

  • একটি ফাংশন ডিফাইন করো যার লাস্ট প্যারামিটার এলিপসিস এবং তার ঠিক আগেরটি সবসময় একটি int হবে যা আর্গুমেন্টের সংখ্যা রিপ্রেজেন্ট করবে।

  • ফাংশন ডেফিনিশনে va_list টাইপের ভেরিয়েবল তৈরি করো। এই টাইপ stdarg.h হেডার ফাইলে ডিফাইন করা আছে।

  • int প্যারামিটার এবং va_start ম্যাক্রো ব্যবহার করে va_list ভেরিয়েবলকে আর্গুমেন্ট লিস্টে ইনিশিয়ালাইজ করো। va_start ম্যাক্রো stdarg.h-এ ডিফাইন করা আছে।

  • va_arg ম্যাক্রো এবং va_list ভেরিয়েবল ব্যবহার করে আর্গুমেন্ট লিস্টের প্রতিটি আইটেম এক্সেস করো।

  • va_end ম্যাক্রো ব্যবহার করে va_list ভেরিয়েবলের জন্য অ্যালোকেটেড মেমরি ক্লিন আপ করো।

এখন উপরের ধাপগুলো ফলো করে একটি সিম্পল ফাংশন লিখি যা ভেরিয়েবল সংখ্যক প্যারামিটার নিবে এবং তাদের গড় রিটার্ন করবে -

উদাহরণ কোড

#include <iostream> 
#include <cstdarg> 
using namespace std; 
double average(int num, ...) { 
    va_list valist; 
    double sum = 0.0; 
    int i; 
    va_start(valist, num); // num সংখ্যক আর্গুমেন্টের জন্য valist ইনিশিয়ালাইজ
    for (i = 0; i < num; i++) { // valist-এ অ্যাসাইন করা সব আর্গুমেন্ট এক্সেস
        sum += va_arg(valist, int); 
    } 
    va_end(valist); // valist-এর জন্য রিজার্ভড মেমরি ক্লিন আপ
    return sum / num; 
} 
int main() { 
    cout << "Average of 2, 3, 4, 5 = " << average(4, 2, 3, 4, 5) << endl; 
    cout << "Average of 5, 10, 15 = " << average(3, 5, 10, 15) << endl; 
}

আউটপুট

Average of 2, 3, 4, 5 = 3.5
Average of 5, 10, 15 = 10

  1. C++-এ ন্যূনতম পৃষ্ঠা বণ্টন (Allocate Minimum Pages)

  2. C++ প্রোগ্রাম: মিস্টেরি নাম্বার (Mystery Number) চেক করা

  3. C++-এ CHAR_BIT

  4. C++-এ ভেরিয়েবল কীভাবে ইনিশিয়ালাইজ করবেন?