2010-07-16 15 views
14

यदि मैं GCC_PREPROCESSOR_DEFINITIONS (या प्रीप्रोसेसर मैक्रोज़ यदि आप एक्सकोड का उपयोग करते हैं "के तहत एक मैक्रो" FOO = bar "जोड़ते हैं, तो" FOO "के मूल्य तक पहुंचने का सबसे अच्छा तरीका क्या होगा?प्रीप्रोसेसर मैक्रो परिभाषा के मूल्य तक पहुंच

वर्तमान में, मैं अनाड़ी का उपयोग करें:

#define MACRO_NAME(f) #f 
    #define MACRO_VALUE(f) MACRO_NAME(f) 

    #ifdef FOO 
     NSLog(@"%s", MACRO_VALUE(FOO)); 
    #else 
     NSLog(@"undefined"); 
    #endif 

हो जाएगा ताकि उत्पादन "बार"

निश्चित रूप से, वहाँ एक बेहतर/क्लीनर तरीका होना चाहिए

उत्तर

10

क्या आप कर रहे हैं रास्ता (या stringify) मैक्रो मूल्यों के stringize है। संकेतक अपरिहार्य है।

यह भी जीसीसी प्रीप्रोसेसर manual section में बताया गया है कि रोब से जुड़ा हुआ है।

+0

पुष्टि के लिए धन्यवाद। – Adriaan

2
NSLog(@"%s", #FOO); 
?

Stringification देखें। यह वह तकनीक है जिसका आप पहले से उपयोग कर रहे हैं। इसके साथ गलत क्या था?

+1

इसका परिणाम 'एनएसएलओजी (@ "% s", #bar) होगा;' प्रीप्रोकैसिंग के बाद - मैक्रो विस्तार की अनुमति देने के लिए किसी अन्य मैक्रो के माध्यम से संकेत की आवश्यकता होती है। –

+0

नोट किया गया, और सहमत हो गया। –

+0

इसका मतलब है कि आप एक प्रीप्रोसेसर स्ट्रिंग मैक्रो को एनएसएसटींग निरंतर दाएं में नहीं बदल सकते हैं? (जैसे ही आप करते हैं [NSString stringWithFormat: macroString] यह निरंतर प्रारंभकर्ता बन जाता है।) – zekel

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