कम से कम कुछ सी preprocessors आप किसी मैक्रो का मान stringize, बल्कि जैसा कि इसके नाम से, एक और है कि यह stringizes करने के लिए एक समारोह की तरह मैक्रो के माध्यम से पारित करके करते हैं:डबल-स्ट्रिंगज चाल काम कैसे करता है?
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
उदाहरण उपयोग के मामलों here।
यह कम से कम जीसीसी और क्लैंग (-std=c99
के साथ) में काम करता है, लेकिन मुझे यकीन नहीं है कि यह सी-मानक शर्तों में कैसे काम करता है।
क्या यह व्यवहार सी 99 द्वारा गारंटीकृत है?
यदि हां, तो सी 99 इसकी गारंटी कैसे देता है?
यदि नहीं, तो व्यवहार सी-परिभाषित से जीसीसी-परिभाषित करने के लिए किस बिंदु पर जाता है?
यदि आप "कम से कम कुछ" कहते हैं, तो क्या इसका मतलब है कि आपने एक ऐसा देखा है जहां यह काम नहीं करता है? मैं विक्रेता को एक बग रिपोर्ट लिखने के लिए तैयार हूं। – Jens
@ जेन्स: नहीं; मैंने नहीं किया मैंने उपयोग किए गए प्रत्येक कंपाइलर (अर्थात्, जीसीसी और क्लैंग) इस व्यवहार को लागू करता है। –