C में मल्टीलाइन मैक्रोज़ लिखने के लिए प्रत्येक लाइन के अंत में बैकस्लैश (\) लगाएं।
सिंटैक्स नियम
- प्रत्येक लाइन (अंतिम को छोड़कर)
\से समाप्त होनी चाहिए। \के बाद **कोई व्हाइटस्पेस नहीं** (न्यूलाइन तुरंत)।- पूरे मैक्रो को
do { ... } while(0)में लपेटें ताकि यह स्टेटमेंट जैसा व्यवहार करे।
उदाहरण
#include <stdio.h>
#define PRINT(x, str) \
do { \
printf("The number %d", x); \
printf(" is "); \
printf(#str); \
printf("\n"); \
} while (0)
int main() {
int x = 10;
if (x % 2 == 0) {
PRINT(x, EVEN); // सेमीकॉलन के साथ उपयोग
}
return 0;
}
आउटपुट
The number 10 is EVEN
do { ... } while(0) क्यों?
- मैक्रो को सिंगल स्टेटमेंट बनाता है।
if (cond) MACRO(); else ...सही काम करता है।- बिना इसके,
if (cond) MACRO();केवल पहली लाइन कोifबॉडी मानता है।
स्ट्रिंगिफिकेशन और कन्केटिनेशन
#define STR(x) #x // स्ट्रिंगिफिकेशन: STR(hello) → "hello"
#define CAT(a, b) a ## b // कन्केटिनेशन: CAT(var, 1) → var1
#define LOG(msg) printf("LOG: " #msg "\n")
सावधानियां
- मैक्रो पैरामीटर्स को पैरेंथेसिस में लपेटें:
#define SQR(x) ((x)*(x))। - साइड इफेक्ट्स वाले आर्गुमेंट्स से बचें:
SQR(i++)→((i++)*(i++))(UB)। - लंबे मैक्रोज़ के बजाय
static inlineफंक्शन्स प्राथमिकता दें (C99)।