कभी-कभी, आप एक ऐसी स्थिति का सामना कर सकते हैं, जब आप एक ऐसा फंक्शन चाहते हैं, जो वेरिएबल नंबर ऑफ आर्गुमेंट्स ले सके, यानी, पैरामीटर्स, पूर्वनिर्धारित संख्या के पैरामीटर्स के बजाय। 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