কখনও কখনও, আপনি এমন একটি পরিস্থিতির মুখোমুখি হতে পারেন, যখন আপনি একটি ফাংশন রাখতে চান, যা পূর্বনির্ধারিত সংখ্যক প্যারামিটারের পরিবর্তে পরিবর্তনশীল সংখ্যক আর্গুমেন্ট নিতে পারে, যেমন প্যারামিটার। 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); //initialize valist for num number of arguments for (i = 0; i < num; i++) { //access all the arguments assigned to valist sum += va_arg(valist, int); } va_end(valist); //clean memory reserved for 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