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

C में मैक्रोज़ और फंक्शन्स का अंतर


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

तुलना तालिका

पहलूमैक्रोज़ (#define)फंक्शन्स
प्रोसेसिंगप्रीप्रोसेसिंग (टेक्स्ट रिप्लेसमेंट)कंपाइलेशन (कोड जनरेशन)
टाइप चेकिंगनहींहाँ
आर्गुमेंट इवैल्यूएशनहर उपयोग पर (मल्टीपल इवैल्यूएशन संभव)एक बार (कॉल पर)
स्कोपफाइल-लेवल (नामस्पेस नहीं)ब्लॉक/फाइल/नेमस्पेस स्कोप
डिबगिंगकठिन (सिंबल टेबल में नहीं)आसान (डिबगर में दिखते हैं)
कोड साइजप्रत्येक उपयोग पर एक्सपैंड होता हैएक बार कंपाइल, कॉल ओवरहेड
रिकर्सननहींहाँ
एड्रेस ले सकते हैं?नहींहाँ (फंक्शन पॉइंटर)

क्लासिक समस्या: ऑपरेटर प्रेसिडेंस

#include <stdio.h>

#define SQUARE(x) x * x      // खतरनाक: कोई पैरेंथेसिस नहीं
int sqr(int x) { return x * x; }

int main() {
    printf("sqr(3+2) = %d\n", sqr(3+2));       // 25 ✓
    printf("SQUARE(3+2) = %d\n", SQUARE(3+2)); // 11 ✗ (3+2*3+2 = 3+6+2)
    return 0;
}

आउटपुट

sqr(3+2) = 25
SQUARE(3+2) = 11

सही मैक्रो परिभाषा

#define SQUARE(x) ((x) * (x))  // पैरेंथेसिस महत्वपूर्ण!
#define MAX(a, b) ((a) > (b) ? (a) : (b))

कब मैक्रोज़ उपयोग करें

  • कंपाइल-टाइम कॉन्स्टेंट्स (#define MAX_SIZE 100)।
  • कंडीशनल कंपाइलेशन (#ifdef DEBUG)।
  • जेनेरिक कोड जहां टेम्पलेट्स (C++) उपलब्ध नहीं।
  • स्ट्रिंगिफिकेशन (#x) / टोकन पेस्टिंग (##)।

आधुनिक विकल्प

  • C++: inline फंक्शन्स, constexpr, टेम्पलेट्स।
  • C: static inline फंक्शन्स (C99), _Generic (C11)।
  1. - C/C++ में थ्रेड फंक्शन्स

    इस ट्यूटोरियल में, हम C/C++ में थ्रेड फंक्शन्स को समझने के लिए एक प्रोग्राम पर चर्चा करेंगे। थ्रेड फंक्शन्स यूजर्स को एक ही समय में समवर्ती फंक्शन्स को लागू करने की अनुमति देते हैं, जो निष्पादन के लिए एक-दूसरे पर निर्भर या स्वतंत्र हो सकते हैं। उदाहरण #include #include #include void* func(void* a

  1. C में वर्ग के अंदर वर्ग प्रिंट करने का प्रोग्राम C में वर्ग के अंदर वर्ग प्रिंट करने का प्रोग्राम

    प्रोग्राम विवरण नीचे दिखाए अनुसार वर्ग के अंदर वर्ग प्रिंट करें: एल्गोरिदम उपयोगकर्ता से बाहरी वर्ग बनाने के लिए पंक्तियों की संख्या स्वीकार करें निर्दिष्ट पंक्तियों के साथ बाहरी वर्ग प्रदर्शित करें बाहरी वर्ग के अंदर एक और वर्ग प्रदर्शित करें उदाहरण /* वर्ग के अंदर वर्ग प्रिंट करने का प्रोग्राम

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

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