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