2011-07-28 10 views
6

जीएनयू के सीपीपी आप की तरह तोमैं सीपीपी का उपयोग कर एक स्ट्रिंग में मैक्रो कैसे बदलूं?

#define STR(x) #x 

फिर, STR(hi)"hi"

के साथ प्रतिस्थापित किया गया है लेकिन यह कैसे आप एक स्ट्रिंग में एक मैक्रो (नहीं एक मैक्रो पैरामीटर) की बारी है तार में मैक्रो मापदंडों चालू करने के लिए अनुमति देता है ?

कहें कि मेरे पास कुछ मूल्य के साथ एक मैक्रो कॉन्स्टेंट है उदा।

#define CONSTANT 42 

यह काम नहीं करता है: STR(CONSTANT)। यह "CONSTANT" उत्पन्न करता है जो हम नहीं चाहते हैं।

+0

मुझे लगता है आप उत्पादन "42" होना चाहता हूँ - मैं एक समारोह लेखन के बिना नहीं लगता कि आप कर सकते हैं। – Soren

उत्तर

14

चाल एक नया मैक्रो परिभाषित करना है जो STR पर कॉल करता है।

#define STR(str) #str 
#define STRING(str) STR(str) 

फिर STRING(CONSTANT)"42" पैदावार के रूप में वांछित।

+0

मेरा मानना ​​है कि इस तरह इस्तेमाल किए गए एम्पर्सेंड को आमतौर पर मैक्रो "स्ट्रिंगज" ऑपरेटर के रूप में जाना जाता है। –

+5

'#' एक "एम्परसैंड" नहीं है। सार्थक नामों का उपयोग करने के लिए –

10

आप डबल अविवेक जादू की जरूरत है:

#define QUOTE(x) #x 
#define STR(x) QUOTE(x) 

#define CONSTANT 42 

const char * str = STR(CONSTANT); 
+1

+1। – ArjunShankar

संबंधित मुद्दे