Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C में मैक्रोज़ के लिए वेरिएबल लेंथ आर्गुमेंट्स


C99 मानक ने मैक्रोज़ के लिए वेरिएबल आर्गुमेंट्स (वेरिएडिक मैक्रोज़) का समर्थन पेश किया, __VA_ARGS__ और कन्केटिनेशन ऑपरेटर ## का उपयोग करके।

सिंटैक्स

#define MACRO_NAME(param, ...) __VA_ARGS__

मुख्य तत्व

  • ... (इलिप्सिस): वेरिएबल आर्गुमेंट्स दर्शाता है।
  • __VA_ARGS__: सभी वेरिएबल आर्गुमेंट्स को एक्सपैंड करता है।
  • ## (टोकन पेस्टिंग): ##__VA_ARGS__ कॉमा समस्या हल करता है जब कोई वेरिएबल आर्गुमेंट नहीं दिया जाता।

उदाहरण: लॉगिंग मैक्रो

#include <stdio.h>

#define INFO 1
#define ERR 2
#define STD_OUT stdout
#define STD_ERR stderr

#define LOG_MESSAGE(pr, strm, msg, ...) \
    do { \
        char *str; \
        if (pr == INFO) \
            str = "INFORMATION"; \
        else if (pr == ERR) \
            str = "ERROR"; \
        fprintf(strm, "[%s] : %s : %d : " msg "\n", \
                str, __FILE__, __LINE__, ##__VA_ARGS__); \
    } while (0)

int main(void) {
    char *s = "Test String";
    LOG_MESSAGE(ERR, STD_ERR, "Unable to open the file");
    LOG_MESSAGE(INFO, STD_OUT, "%s is passed as argument", s);
    LOG_MESSAGE(INFO, STD_OUT, "%d + %d = %d", 14, 16, (14 + 16));
    return 0;
}

आउटपुट

[ERROR] : test.c : 21 : Unable to open the file
[INFORMATION] : test.c : 23 : Test String is passed as argument
[INFORMATION] : test.c : 25 : 14 + 16 = 30

व्याख्या

  • do { ... } while(0): मैक्रो को सिंगल स्टेटमेंट जैसा व्यवहार करने के लिए (सेमीकॉलन के साथ उपयोग हेतु)।
  • ##__VA_ARGS__: जब कोई वेरिएबल आर्गुमेंट नहीं होता, तो पूर्ववर्ती कॉमा को हटा देता है।
  • __FILE__, __LINE__: प्रीडिफाइंड मैक्रोज़ फाइल नाम और लाइन नंबर के लिए।

उपयोग के मामले

  • लॉगिंग/डीबगिंग मैक्रोज़
  • वेरिएडिक फंक्शन रैपर्स
  • जेनेरिक कंटेनर/एल्गोरिदम मैक्रोज़
  1. C प्रोग्राम में दिए गए विकर्ण लंबाई के साथ षट्कोण का क्षेत्रफल C प्रोग्राम में दिए गए विकर्ण लंबाई के साथ षट्कोण का क्षेत्रफल

    समस्या विवरण यहां हम देखेंगे कि विकर्ण लंबाई का उपयोग करके एक षट्कोण का क्षेत्रफल कैसे प्राप्त करें। षट्कोण की विकर्ण लंबाई d है। सूत्र एक नियमित षट्कोण के आंतरिक कोण 120° प्रत्येक होते हैं। सभी आंतरिक कोणों का योग 720° होता है। यदि विकर्ण d है, तो क्षेत्रफल = (3 * √3 * d²) / 8 C++ प्रोग्राम उदाह

  1. Matplotlib में वेरिएबल लेंथ डेटा के साथ बॉक्सप्लॉट Matplotlib में वेरिएबल लेंथ डेटा के साथ बॉक्सप्लॉट

    Matplotlib में वेरिएबल लेंथ डेटा के साथ बॉक्सप्लॉट बनाने के लिए, हम निम्नलिखित चरण अपना सकते हैं - फिगर का आकार सेट करें और सबप्लॉट्स के बीच और आसपास पैडिंग समायोजित करें। डेटा पॉइंट्स की सूची बनाएं। boxplot() मेथड का उपयोग करके बॉक्स और व्हिस्कर प्लॉट बनाएं। फिगर प्रदर्शित करने के लिए show() मेथड

  1. - पायथन में कमांड लाइन आर्गुमेंट्स

    कमांड लाइन आर्गुमेंट्स प्रोग्राम को रनटाइम पर कॉन्फ़िगर करने की अनुमति देते हैं। पायथन इन्हें पढ़ने के कई तरीके प्रदान करता है। 1. sys.argv (सबसे सरल) sys.argv एक लिस्ट है जिसमें कमांड लाइन आर्गुमेंट्स स्ट्रिंग्स के रूप में होते हैं। import sys print(type(sys.argv)) # print(Command line argument