मान लीजिए कि हम कुछ फ़ंक्शन बनाना चाहते हैं जो कई तर्क ले सकते हैं, तो निश्चित संख्या में तर्क नहीं हैं। हम तीन कार्यों को योग (), अधिकतम () और न्यूनतम () बनाना चाहते हैं, वे क्रमशः संख्याओं के योग, अधिकतम संख्या और न्यूनतम दी गई संख्याओं की गणना कर सकते हैं। इनमें से प्रत्येक फ़ंक्शन उनके पहले तर्क के रूप में गिने जाने वाले तर्कों की संख्या लेगा। इस प्रकार के फंक्शन को परिभाषित करने के लिए हमें फंक्शन आर्ग्युमेंट में इलिप्सिस (...) तीन बिंदुओं का उपयोग करना होगा। इसका उपयोग करने के लिए हमें stdarg.h हेडर फाइल को शामिल करना होगा। इस प्रकार के फंक्शन को वैरिएडिक्ट फंक्शन कहते हैं। चर तर्कों तक पहुँचने के लिए चार अलग-अलग चीजें हैं जिन पर हम ध्यान दे सकते हैं -
-
va_list :यह सभी दिए गए तर्कों को संग्रहीत करता है
-
va_start :यह वेरिएबल तर्क एपी वेरिएबल को एक्सेस करना शुरू कर देगा
-
va_arg :इसका उपयोग दिए गए प्रकार के अगले तर्क को पुनः प्राप्त करने के लिए किया जाता है
-
va_end :यह चर तर्क सूची तक पहुँच समाप्त करता है
इसलिए, अगर हम −;
. जैसे फंक्शन कहते हैं- योग(5, 5, 2, 8, 9, 3)
- अधिकतम(3, 5, 9, 2)
- मिनट(6, 8, 5, 2, 6, 7, 9)
तो आउटपुट 27 (सभी पांच नंबरों का योग), 9 (दिए गए तीन नंबरों में से अधिकतम), 2 (दिए गए छह नंबरों में से न्यूनतम) होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
फ़ंक्शन योग () को परिभाषित करें, इसमें तर्कों की cnt, और चर संख्या की आवश्यकता होगी
- va_list एपी परिभाषित करें
- va_start(ap, cnt) द्वारा एपी को इनिशियलाइज़ करें
- n :=0
- इनिशियलाइज़ i :=0 के लिए, जब i
- n :=n + अगला तर्क va_arg(ap, int) द्वारा
- न्यूनतम :=वर्तमान
- अधिकतम:=वर्तमान
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <stdio.h> #include <stdarg.h> int sum (int cnt,...) { va_list ap; int i, n; va_start(ap, cnt); n = 0; for (i=0;i<cnt;i++){ n += va_arg(ap, int); } va_end(ap); return n; } int min(int cnt,...) { va_list ap; int i, current, minimum; va_start(ap, cnt); minimum = 99999; for (i=0;i<cnt;i++){ current = va_arg(ap, int); if (current < minimum) minimum = current; } va_end(ap); return minimum; } int max(int cnt,...) { va_list ap; int i, current, maximum; va_start(ap, cnt); maximum = 0; for (i=0;i<cnt;i++){ 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)); }
इनपुट
sum(5, 5, 2, 8, 9, 3) max(3, 5, 9, 2) min(6, 8, 5, 2, 6, 7, 9)
आउटपुट
27 9 2