2012-06-23 34 views
7

में इस फ़ंक्शन को कैसे पूरा करें I मुझे एक मैक्रो की आवश्यकता है जो दिए गए पैरामीटर के नाम और मान को आउटपुट करने में मदद करता है। यह निम्नलिखित कोड की तरह कुछ है।सी/सी ++

#define AA "Hello" 
#define BB "World" 
#define PRINT(input_param) printf("input_param: %s\n", (input_param)) 
void main() 
{ 
    PRINT(AA); 
    PRINT(BB); 
} 

मैं परिणाम की उम्मीद कर रहा हूँ: AA: Hello\n BB: World\n

लेकिन स्पष्ट रूप से यह नहीं है। कोई भी मुझे सही कर सकता है? धन्यवाद।

+1

क्यों "लेकिन स्पष्ट रूप से यह नहीं है" .. क्या होता है तो आप इस चलते हैं तो:

#define AA "Hello" #define BB "World" #define PRINT(input_param) printf(#input_param ": %s\n", (input_param)) void main() { PRINT(AA); PRINT(BB); } 

यह और अधिक स्पष्ट करता है, तो मैं इसे इस तरह लिखा हो सकता है? – Levon

+0

@ लेवॉन "इनपुट_परैम: हैलो \ ninput_param: दुनिया \ n" –

+0

@ आर। मार्टिन्हो फर्नांडीस जानकारी के लिए धन्यवाद। – Levon

उत्तर

12

आपको मैक्रो नाम को # के साथ स्ट्रिंग करने की आवश्यकता है। यह कैसे assert() रूप में अच्छी तरह काम करता है:

#define PRINT(input_param) printf("%s: %s\n", #input_param, (input_param)) 
+0

शानदार! आपका बहुत बहुत धन्यवाद! –

+1

दूसरा दूसरा 'प्रिंटर (बार% foo)' जैसी आपदाओं के खिलाफ गार्ड करता है। – Dave

+0

ऐसा नहीं है कि यह दर्द होता है, लेकिन आपको तर्क के रूप में पारित मैक्रो पैरामीटर के आसपास माता-पिता की आवश्यकता नहीं होती है (क्योंकि उनमें अल्पविराम शामिल नहीं हो सकता है)। –

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