সি-তে stdarg.h হেডার ব্যবহার করে ভেরিয়াডিক (পরিবর্তনশীল আর্গুমেন্ট গ্রহণকারী) ফাংশন লিখা যায়। এখানে sum(), max() এবং min() তিনটি ফাংশন বানানো হয়েছে যারা যত ইচ্ছে আর্গুমেন্ট নিতে পারে। প্রথম আর্গুমেন্ট হবে আর্গুমেন্টের সংখ্যা (cnt)।
মূল কনসেপ্ট
va_list— আর্গুমেন্ট লিস্ট সংরক্ষণ করে।va_start(ap, cnt)— অ্যাক্সেস শুরু করে।va_arg(ap, int)— পরবর্তী আর্গুমেন্ট নিয়ে আসে।va_end(ap)— অ্যাক্সেস শেষ করে।
উদাহরণ
sum(5, 5, 2, 8, 9, 3) → 27
max(3, 5, 9, 2) → 9
min(6, 8, 5, 2, 6, 7, 9) → 2
C কোড উদাহরণ
#include <stdio.h>
#include <stdarg.h>
int sum(int cnt, ...) {
va_list ap;
va_start(ap, cnt);
int n = 0;
for (int i = 0; i < cnt; i++)
n += va_arg(ap, int);
va_end(ap);
return n;
}
int min(int cnt, ...) {
va_list ap;
va_start(ap, cnt);
int minimum = 99999;
for (int i = 0; i < cnt; i++) {
int current = va_arg(ap, int);
if (current < minimum) minimum = current;
}
va_end(ap);
return minimum;
}
int max(int cnt, ...) {
va_list ap;
va_start(ap, cnt);
int maximum = 0;
for (int i = 0; i < cnt; i++) {
int current = va_arg(ap, int);
if (current > maximum) maximum = current;
}
va_end(ap);
return maximum;
}
int main() {
printf("%d\n", sum(5, 5, 2, 8, 9, 3));
printf("%d\n", max(3, 5, 9, 2));
printf("%d\n", min(6, 8, 5, 2, 6, 7, 9));
return 0;
}
ইনপুট ও আউটপুট
ইনপুট: sum(5, 5, 2, 8, 9, 3) max(3, 5, 9, 2) min(6, 8, 5, 2, 6, 7, 9)
আউটপুট: 27 9 2