C में कॉन्स्टेंट मान परिभाषित करने के दो मुख्य तरीके हैं: प्रीप्रोसेसर मैक्रो (#define) और const क्वालिफायर।
तुलना
| विशेषता | #define (मैक्रो) | const वेरिएबल |
|---|---|---|
| प्रोसेसिंग चरण | प्रीप्रोसेसिंग (कंपाइलेशन से पहले) | कंपाइलेशन |
| टाइप चेकिंग | नहीं | हाँ |
| मेमोरी उपयोग | नहीं (टेक्स्ट रिप्लेसमेंट) | हाँ (वेरिएबल के लिए स्टोरेज) |
| स्कोप | फाइल स्कोप (जहां परिभाषित) | ब्लॉक/फाइल स्कोप (नियमों का पालन) |
| डिबगिंग | कठिन (सिंबल टेबल में नहीं) | आसान (डिबगर में दिखता है) |
| एड्रेस ले सकते हैं? | नहीं | हाँ (&const_var) |
| पॉइंटर से संशोधन | लागू नहीं | संभव लेकिन अनडिफाइंड बिहेवियर |
उदाहरण
#define PI 3.14159 // मैक्रो - कोई टाइप नहीं
const double PI_VAL = 3.14159; // टाइप्ड कॉन्स्टेंट
// मैक्रो समस्या: कोई टाइप चेकिंग नहीं
#define SQUARE(x) x * x
// SQUARE(3+2) → 3+2*3+2 = 11 (गलत!)
// const फंक्शन बेहतर
inline int square(int x) { return x * x; }
सर्वोत्तम अभ्यास
- const प्राथमिकता दें: टाइप सेफ्टी, स्कोप नियम, डिबगिंग सपोर्ट।
- #define उपयोग करें: कंपाइल-टाइम कॉन्फिगरेशन, कंडीशनल कंपाइलेशन, मैक्रो फंक्शन्स (सावधानी से)।
- आधुनिक C++ में
constexpr(C++11) कॉन्स्टेंट एक्सप्रेशन के लिए सर्वोत्तम है।
नोट
अच्छे ऑप्टिमाइज़िंग कंपाइलर्स const वेरिएबल्स को मेमोरी आवंटित किए बिना सीधे मान में बदल सकते हैं, इसलिए प्रदर्शन अंतर नगण्य होता है।