में: C++ FAQ - Miscellaneous technical issues - [39.6] What should be done with macros that need to paste two tokens together?मैक्रोज़ के लिए मुझे संकेत की डबल परत की आवश्यकता क्यों है?
कोई मुझे क्यों को समझा सकते हैं? मैंने पढ़ा है मुझे पर भरोसा है, लेकिन मैं बस किसी चीज़ पर भरोसा नहीं कर सकता क्योंकि किसी ने ऐसा कहा था।
मैं दृष्टिकोण की कोशिश की और मैं किसी भी कीड़े दिखाई नहीं दे पा सकते हैं:
#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
तो क्यों मैं (वेबपेज से उद्धरण) के बजाय इस तरह यह क्या करना होगा:
हालांकि जब आप ## का उपयोग करते हैं तो आपको संकेत की एक डबल परत की आवश्यकता होती है। मूल रूप से आप इस तरह के के रूप में "टोकन चिपकाने" के लिए एक विशेष मैक्रो बनाना होगा: इस पर
#define NAME2(a,b) NAME2_HIDDEN(a,b) #define NAME2_HIDDEN(a,b) a ## b
ट्रस्ट मुझे - क्या तुम सच में यह करने के लिए की जरूरत है! (और किसी ने मुझे कहा कि यह कभी कभी अविवेक की दूसरी परत के बिना काम करता लिखें __ LINE__ के साथ एक प्रतीक श्रृंखलाबद्ध की कोशिश करो और देखो क्या तब होता है।।)
संपादित करें: किसी भी समझा सकते हैं कि क्यों वह का उपयोग करता है NAME2_HIDDEN
नीचे घोषित करने से पहले? इसका उपयोग करने से पहले NAME2_HIDDEN
मैक्रो को परिभाषित करने के लिए यह अधिक तार्किक लगता है। क्या यह यहां कुछ प्रकार की चाल है?
मुझे यकीन नहीं है कि मैं समझ रहा हूं कि आप क्या पूछ रहे हैं ... –
मैं इसे थोड़ा अस्पष्ट देखता हूं, मैं संपादित करूंगा। – Rookie
@tenfour, किया। क्या आप मेरे संपादन भाग का जवाब जान सकते हैं? – Rookie