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

C . में मैक्रोज़ बनाम फ़ंक्शंस

इस खंड में हम देखेंगे कि सी में मैक्रोज़ और फ़ंक्शंस के बीच अंतर क्या हैं। मैक्रोज़ पूर्व-संसाधित हैं, इसलिए इसका मतलब है कि सभी मैक्रोज़ को संकलित करते समय प्रीप्रोसेस किया जाएगा। फ़ंक्शंस पूर्व-संसाधित नहीं हैं, लेकिन संकलित हैं।

मैक्रोज़ में किसी प्रकार की जाँच नहीं की जाती है, इसलिए विभिन्न प्रकार के इनपुट के लिए कुछ समस्याएँ हो सकती हैं। कार्यों के मामले में, ऐसा नहीं किया जाता है। इसके अलावा मैक्रोज़ के लिए यदि इनपुट ठीक से बनाए नहीं रखा जाता है, तो यह कुछ अमान्य परिणाम उत्पन्न कर सकता है। समस्या के बारे में विचार प्राप्त करने के लिए कृपया निम्न प्रोग्राम देखें।

उदाहरण

#include <stdio.h>
#define SQUARE(x) x * x
int sqr(int x) {
   return x*x;
}
main() {
   printf("Use of sqr(). The value of sqr(3+2): %d\n", sqr(3+2));
   printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2));
}

आउटपुट

Use of sqr(). The value of sqr(3+2): 25
Use of SQUARE(). The value of SQUARE(3+2): 11

फ़ंक्शन और मैक्रो, हम चाहते हैं कि दोनों एक ही कार्य करेंगे, लेकिन यहां हम देख सकते हैं कि आउटपुट समान नहीं हैं। मुख्य कारण यह है कि जब हम 3 + 2 को फ़ंक्शन तर्क के रूप में पास कर रहे हैं, तो यह 5 में परिवर्तित हो जाता है, फिर 5 * 5 =25 की गणना करें। मैक्रो के लिए यह 3 + 2 * 3 + 2 =3 + 6 + 2 =11 कर रहा है।

इसलिए निम्न समस्याओं के लिए मैक्रोज़ की अनुशंसा नहीं की जाती है -

  • कोई प्रकार की जाँच नहीं है

  • डिबग करने के लिए डिफ़ॉल्ट, क्योंकि वे सरल प्रतिस्थापन का कारण बनते हैं

  • मैक्रो में नेमस्पेस नहीं है। इसलिए यदि मैक्रो को एक सेक्शन में परिभाषित किया गया है, तो इसे दूसरे सेक्शन में इस्तेमाल किया जा सकता है।

  • मैक्रो कोड की लंबाई बढ़ाता है क्योंकि इसे प्रीप्रोसेसिंग के दौरान कोड से पहले जोड़ा जाता है।

  • मैक्रो किसी भी संकलन समय त्रुटियों की जाँच नहीं करता है।


  1. C/C++ में थ्रेड फंक्शन्स

    इस ट्यूटोरियल में, हम C/C++ में थ्रेड फ़ंक्शंस को समझने के लिए एक प्रोग्राम पर चर्चा करेंगे। थ्रेड फ़ंक्शंस उपयोगकर्ताओं को एक ही समय में समवर्ती कार्यों को लागू करने की अनुमति देते हैं, जो या तो निष्पादन के लिए एक दूसरे पर निर्भर हो सकते हैं या स्वतंत्र हो सकते हैं। उदाहरण #include <pthread.h&g

  1. C . में एक स्क्वायर के अंदर स्क्वायर प्रिंट करने का कार्यक्रम

    कार्यक्रम विवरण स्क्वायर के अंदर स्क्वायर प्रिंट करें जैसा कि नीचे दिखाया गया है एल्गोरिदम Accept the number of rows the outer Square to be drawn Display the Outer Square with the number of rows specified by the User. Display another square inside the outer square. उदाहरण /* Program to print Squa

  1. एक वर्ग के अंदर एक पत्ती का क्षेत्रफल?

    यहां हम देखेंगे कि नीचे दिए गए पत्ते के आकार का क्षेत्रफल कैसे प्राप्त करें, जो वर्ग ABCD के अंदर मौजूद है। वर्ग की प्रत्येक भुजा की लंबाई a है। पत्ती के दो बराबर भाग होते हैं। प्रत्येक भाग का क्षेत्रफल p कहा जाता है, अब - और पूरी पत्ती का क्षेत्रफल 2p है। उदाहरण #include <iostream> usin