इस
#define space_conc(str1,str2) #str1 " " #str2
'##' प्रतीक, नहीं तार जोड़ लिए किया जाता है की कोशिश करो। स्ट्रिंग्स को सी में आसानी से जोड़ा जा सकता है, और संकलक उन्हें जोड़ देगा, जो यह मैक्रो करता है। सबसे पहले str1 और str2 तारों में बदल जाता है (आइए हम "हैलो" और "दुनिया" कहें यदि आप इसे space_conc(hello, world)
की तरह उपयोग करते हैं) और उन्हें सरल, एकल-स्थान, स्ट्रिंग के बीच एक-दूसरे के आगे रखता है। यही कारण है, जिसके परिणामस्वरूप विस्तार इस
"hello" " " "world"
तरह संकलक द्वारा दर्शाया जाएगा जो इसे पूर्णता के लिए
"hello world"
को जोड़ देंगे HTH
संपादित
, '# # 'मैक्रो विस्तार में ऑपरेटर इस तरह प्रयोग किया जाता है, मान लीजिए कि आपके पास
है 210
निम्नलिखित में परिणाम होगा अगर dumb_macro(hello, world)
helloworld
जो एक स्ट्रिंग नहीं है के रूप में कहा जाता है, लेकिन एक प्रतीक और आप शायद एक अपरिभाषित प्रतीक त्रुटि के साथ खत्म हो जाएगा कह रही है 'HelloWorld' जब तक अस्तित्व में नहीं है आप इसे पहले परिभाषित करते हैं। यह कानूनी होगा:
int helloworld;
dumb_macro(hello, world) = 3;
printf ("helloworld = %d\n", helloworld); // <-- would print 'helloworld = 3'
ध्यान रखें कि यह जरूरी गूंगा आप की तरह 'dumb_macro (mypackage, myfunction)' ... –
@R कुछ कर रहे हैं नहीं है, बेशक अवधारणा, का उपयोग करता है, लेकिन यह आम तौर पर जुड़ा हुआ है। कुछ अन्य अर्थपूर्ण मूल्य, या किसी अन्य चीज़ के साथ मैक्रो को प्रतिस्थापित करने का विकल्प (जैसे, डिबगिंग उद्देश्यों के लिए)। मैं इस तरह के किसी भी चीज़ में डुबकी नहीं लेना चाहता था, इसलिए यह विशेष व्यक्ति सिर्फ एक गूंगा मैक्रो है जो किसी भी वास्तविक उद्देश्य के लिए दो प्रतीक नामों को जोड़ता है ... :) – falstro
जो एक अच्छा जवाब है। जानना चाहता था कि प्रतीक प्रतीक कैसे करें। यह वास्तव में उपयोगी है .. – Anubis