কম্পিউটার

C-তে পরিবর্তনশীল দৈর্ঘ্যের আর্গুমেন্ট


কখনও কখনও, আপনি এমন একটি পরিস্থিতির মুখোমুখি হতে পারেন, যখন আপনি একটি ফাংশন রাখতে চান, যা পূর্বনির্ধারিত সংখ্যক প্যারামিটারের পরিবর্তে পরিবর্তনশীল সংখ্যক আর্গুমেন্ট নিতে পারে, যেমন প্যারামিটার। 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 <stdio.h>
#include <stdarg.h>
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() {
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f", average(3, 5,10,15));
}

আউটপুট

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000

  1. C ভাষায় ভেরিয়েবলের বাইন্ডিং ব্যাখ্যা কর।

  2. সি ল্যাঙ্গুয়েজে কাজ করার জন্য আর্গুমেন্ট হিসেবে পুরো কাঠামো কিভাবে পাস করবেন?

  3. C এবং C++ এ পরিবর্তনশীল দৈর্ঘ্যের অ্যারে

  4. C প্রোগ্রামে 'X' ফরম্যাটে বিজোড় দৈর্ঘ্যের স্ট্রিং প্রিন্ট করুন।