प्रिंटफ अपने तर्कों को कैसे संभालता है? मुझे पता है कि सी # में मैं कुछ ऐसा करने के लिए params
कीवर्ड का उपयोग कर सकता हूं लेकिन मैं इसे सी में नहीं कर सकता?प्रिंटफ अपने तर्कों को कैसे संभालता है?
उत्तर
इस तरह के एक समारोह को variadic function कहा जाता है। आप ...
का उपयोग कर सी में एक घोषित कर सकता है, इसलिए जैसे:
int f(int, ...);
फिर आप va_start
, va_arg
, और va_end
उपयोग कर सकते हैं तर्क सूची के साथ काम करने के लिए। यहाँ एक उदाहरण है:
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
void f(void);
main(){
f();
}
int maxof(int n_args, ...){
register int i;
int max, a;
va_list ap;
va_start(ap, n_args);
max = va_arg(ap, int);
for(i = 2; i <= n_args; i++) {
if((a = va_arg(ap, int)) > max)
max = a;
}
va_end(ap);
return max;
}
void f(void) {
int i = 5;
int j[256];
j[42] = 24;
printf("%d\n",maxof(3, i, j[42], 0));
}
अधिक जानकारी के लिए कृपया The C Book और stdarg.h देखते हैं।
तरीका यह सी में किया जाता है "varargs" कहा जाता है। इसके लिए यहां एक ट्यूटोरियल है: http://c-faq.com/~scs/cclass/int/sx11b.html
इस सुविधा को कहा जाता है 0 फ़ंक्शन में तर्कों की परिवर्तनीय संख्या। आप stdarg.h हेडर फाइल शामिल करने के लिए है, तो अपने समारोह के मुख्य भाग में va_list प्रकार और va_start, va_arg, और va_end कार्यों का उपयोग:
void print_arguments(int number_of_arguments, ...)
{
va_list list;
va_start(list, number_of_arguments);
printf("I am first element of the list: %d \n", va_arg(list, int));
printf("I am second element of the list: %d \n", va_arg(list, int));
printf("I am third element of the list: %d \n", va_arg(list, int));
va_end(list);
}
तो इस तरह से अपनी फ़ंक्शन को कॉल करें:
print_arguments(3,1,2,3);
जो होगा निम्नलिखित प्रिंट आउट:
I am first element of the list: 1
I am second element of the list: 2
I am third element of the list: 3
क्या आपका मतलब 'print_arguments (3,1,2,3)' था? – bk1e
@ बीके 1e: धन्यवाद, मैंने एक टाइपो किया है; अद्यतन किया है – psihodelia
अन्य लोगों की तरह कहा है, printf va_args का उपयोग करता है कार्य करने के लिए। प्रिंटफ के अपने संस्करण को लिखने के लिए यह एक बहुत अच्छा अभ्यास है, अगर प्रिंटफ को सत्यापित करने के लिए कुछ और नहीं है, तो पास्कल के लेखन के विपरीत कंपाइलर जादू नहीं है। ऐसा करने के बाद, आपको इससे दूर चलना चाहिए। यहाँ एक blog article मैं ब्यौरा क्यों (संक्षिप्त उत्तर आप कीड़े एक लंबे समय के लिए चल पाता जा सकते हैं जो बना सकता है) ने लिखा है।
और सिर्फ कहानी जीसीसी (सुनिश्चित करें कि अन्य compilers के बारे में नहीं) को पूरा करने के
#define FUNC(X,Y,...) wiz(X,Y, ##__VA_ARGS__)
variadic मैक्रो अनुमति देने के लिए
- 1. अपने तर्कों
- 2. रूबी बाइट्स/बाइनरी को कैसे संभालता है?
- 3. प्रिंटफ
- 4. Nginx HTTP अनुरोधों को कैसे संभालता है?
- 5. एंड्रॉइड जीयूआई घटनाओं को कैसे संभालता है?
- 6. जेटी कई अनुरोधों को कैसे संभालता है
- 7. कैसे KVM भौतिक बाधा को संभालता है?
- 8. अक्का संदेश संस्करणों को कैसे संभालता है?
- 9. क्या पेटापोको संभालता है?
- 10. यूनिक्स अंतरिक्ष और तर्कों के साथ पूर्ण पथ नाम कैसे संभालता है?
- 11. सी ++ प्रिंटफ
- 12. एक्स 11 क्लिपबोर्ड एकाधिक डेटा स्वरूपों को कैसे संभालता है?
- 13. फेसबुक पक्ष में गोपनीयता सेटिंग्स को कैसे संभालता है?
- 14. एमपीआई कार्यान्वयन (ओपनएमपीआई, एमपीआईसी) सुरक्षा/प्रमाणीकरण को कैसे संभालता है
- 15. आपका संगठन सामान्य घटकों को कैसे संभालता है?
- 16. येगेज प्रोटोटाइप पैटर्न उदाहरण उदाहरण चर को कैसे संभालता है?
- 17. गिट-एसवीएन लाइन अंतराल कैसे संभालता है?
- 18. माइक्रोसॉफ्ट एज़ूर सत्र राज्य कैसे संभालता है?
- 19. एंटीटी फ्रेमवर्क लेनदेन कैसे संभालता है?
- 20. ओपनएमपी नेस्टेड लूप कैसे संभालता है?
- 21. ओपनसीवी - यह रंग प्रोफाइल कैसे संभालता है?
- 22. एनोटेशन-संचालित निर्भरता इंजेक्शन जो विभिन्न वातावरण को संभालता है
- 23. मोंगो डीबी एक बड़े सरणी क्षेत्र को कैसे संभालता है?
- 24. फायरबेस कैसे मूल मूल मुद्दों को संभालता है?
- 25. आर कॉल को फंक्शन कॉल में कैसे संभालता है?
- 26. बैकबोन.जेएस कैसे गणना गुणों के साथ मॉडल को संभालता है
- 27. एंटिटी फ्रेमवर्क SQL सर्वर स्कीमा को कैसे संभालता है?
- 28. जब जावाकास्ट करते समय जावा फ़ील्ड को कैसे संभालता है?
- 29. टेस्ट प्रिंटफ कार्यान्वयन
- 30. प्रिंटफ आउटपुट को वापस कोड में रीडायरेक्ट कैसे करें?
आपका उदाहरण गलत है और काम नहीं करता है, क्योंकि यह सी वाक्य रचना करने के लिए विपरीत है समर्थन करता है। हो सकता है कि आपने एक टाइपो बनाया हो और अंडरस्कोर भूल गए? – psihodelia
इसके अलावा, उल्लेख '# शामिल' अच्छा होगा। –
फिक्स्ड, प्रतिक्रिया के लिए धन्यवाद। –