मैं सी भाषा में एक फ़ंक्शन को परिभाषित करना चाहता हूं जो किसी भी डेटाटाइप के असीमित संख्या में तर्क ले सकता है। उदाहरण के लिए: printf()
, scanf()
, आदिसी में फंक्शन?
इस पर कोई विचार?
मैं सी भाषा में एक फ़ंक्शन को परिभाषित करना चाहता हूं जो किसी भी डेटाटाइप के असीमित संख्या में तर्क ले सकता है। उदाहरण के लिए: printf()
, scanf()
, आदिसी में फंक्शन?
इस पर कोई विचार?
सी में तर्कों की चर संख्या का उपयोग करने के लिए आप शीर्ष लेख
#include <stdarg.h>
सी में printf()
समारोह है कि बहस के चर संख्या लेता है का एक उदाहरण है शामिल करने के लिए की जरूरत है।
int printf(const char *fmt, ...)
अधिक जानकारी here
हम यादृच्छिक क्रम में तर्कों का उपयोग कैसे कर सकते हैं? लिंक हमें क्रमशः उन तक पहुंचने का तरीका दिखाता है। –
void printf(char* format, ...)
{
}
Variadic Functions और varargs.h
या stdarg.h
(संकलक के आधार पर) देखें।
अभी भी उपयोग में कोई कंपाइलर नहीं होना चाहिए जिसे अभी भी '
<stdarg.h>
शीर्षलेख और संबंधित दस्तावेज़ देखें।
एक ...
अंतिम तर्क लेने के रूप में समारोह घोषित। va_list
के रूप में तर्कों तक पहुंचने के लिए आपको <stdarg.h>
से मैक्रोज़ का उपयोग करने की आवश्यकता होगी।
तुम सिर्फ कुछ चाहते हैं "printf
की तरह है, लेकिन थोड़ा अतिरिक्त व्यवहार के साथ", तो आप va_list
करने के लिए vprintf
, vfprintf
, या vsprintf
पारित कर सकते हैं।
#include <stdarg.h>
#include <stdio.h>
#include <time.h>
#ifdef __GNUC__
__attribute__((format(printf, 1, 2)))
#endif
void PrintErrorMsg(const char* fmt, ...)
{
time_t now;
char buffer[20];
va_list args;
va_start(args, fmt);
time(&now);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", gmtime(&now));
fprintf(stderr, "[%s] ", buffer);
vfprintf(stderr, fmt, args);
fputc('\n', stderr);
va_end(args);
}
* नोट: शायद सबसे अच्छा बचा जहां संभव हो ... –
आप एक समारोह जो तर्क का एक "असीमित" संख्या ले जा सकते हैं नहीं लिख सकते हैं। हमेशा कुछ ऊपरी सीमा होती है। आप शायद क्या मतलब है, तर्कों की "परिवर्तनीय" संख्या है। – Nawaz