कभी-कभी, आप एक ऐसी स्थिति में आ सकते हैं, जब आप एक ऐसा फ़ंक्शन करना चाहते हैं, जो पैरामीटर की पूर्वनिर्धारित संख्या के बजाय तर्कों की चर संख्या, यानी पैरामीटर ले सकता है। सी/सी++ प्रोग्रामिंग भाषा इस स्थिति के लिए एक समाधान प्रदान करती है और आपको एक फ़ंक्शन को परिभाषित करने की अनुमति है जो आपकी आवश्यकता के आधार पर पैरामीटर की परिवर्तनीय संख्या को स्वीकार कर सकता है। निम्न उदाहरण ऐसे फ़ंक्शन की परिभाषा दिखाता है।
int func(int, ... ) { . . . } int main() { func(1, 2, 3); func(1, 2, 3, 4); }
यह ध्यान दिया जाना चाहिए कि फ़ंक्शन func() का अपना अंतिम तर्क दीर्घवृत्त के रूप में है, अर्थात तीन बिंदु (...) और दीर्घवृत्त से ठीक पहले वाला हमेशा एक int होता है जो पारित कुल संख्या चर तर्कों का प्रतिनिधित्व करेगा। ऐसी कार्यक्षमता का उपयोग करने के लिए, आपको stdarg.h हेडर फ़ाइल का उपयोग करने की आवश्यकता है जो चर तर्कों की कार्यक्षमता को लागू करने के लिए फ़ंक्शन और मैक्रोज़ प्रदान करता है और दिए गए चरणों का पालन करता है -
-
किसी फ़ंक्शन को उसके अंतिम पैरामीटर के साथ दीर्घवृत्त के रूप में परिभाषित करें और दीर्घवृत्त के ठीक पहले वाला हमेशा एक int होता है जो तर्कों की संख्या का प्रतिनिधित्व करेगा।
-
एक va_list Create बनाएं फ़ंक्शन परिभाषा में चर टाइप करें। इस प्रकार को stdarg.h हेडर फ़ाइल में परिभाषित किया गया है।
-
int . का उपयोग करें पैरामीटर और va_start va_list . को प्रारंभ करने के लिए मैक्रो एक तर्क सूची के लिए चर। मैक्रो va_start को stdarg.h हेडर फ़ाइल में परिभाषित किया गया है।
-
va_arg Use का प्रयोग करें मैक्रो और 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