कम से कम कुछ C प्रीप्रोसेसरों ने आपको एक मैक्रो के मान को उसके नाम के बजाय एक फ़ंक्शन-जैसे मैक्रो के माध्यम से दूसरे से गुजरने से रोक दिया है जो इसे स्ट्रिंग करता है:
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
उदाहरण यहाँ मामलों का उपयोग करें ।
यह कम से कम जीसीसी और क्लैंग (दोनों के साथ -std=c99
) में काम करता है , लेकिन मुझे यकीन नहीं है कि यह सी-मानक शब्दों में कैसे काम करता है।
क्या यह व्यवहार C99 द्वारा गारंटीकृत है?
यदि हां, तो C99 इसकी गारंटी कैसे देता है?
यदि नहीं, तो किस बिंदु पर व्यवहार सी-परिभाषित से जीसीसी-परिभाषित होता है?