मैं ओपनसोर्स प्रोजेक्ट टिग से कोड नमूना का जिक्र कर रहा हूं। एक महान उपकरण कौन सा है!मैक्रोज़ के माध्यम से एनम/स्ट्रक्चर को परिभाषित करने की क्या आवश्यकता है?
फ़ाइल: tig.c
मैं इस प्रकार अनुरोध गणन को परिभाषित करने के लिए एक कारण खोजने के लिए संघर्ष कर रहा हूँ: ..
enum request {
#define REQ_GROUP(help)
#define REQ_(req, help) REQ_##req
/* Offset all requests to avoid conflicts with ncurses getch values. */
REQ_UNKNOWN = KEY_MAX + 1,
REQ_OFFSET,
REQ_INFO,
/* Internal requests. */
REQ_JUMP_COMMIT,
#undef REQ_GROUP
#undef REQ_
};
भी संरचनाओं के रूप में अच्छी तरह से
static const struct request_info req_info[] = {
#define REQ_GROUP(help) { 0, NULL, 0, (help) },
#define REQ_(req, help) { REQ_##req, (#req), STRING_SIZE(#req), (help) }
REQ_INFO
#undef REQ_GROUP
#undef REQ_
};
जैसा कि देखा जा सकता है REQ_GROUP
# भ्रम पैदा करने के कई बार परिभाषित किया गया है .. कम से कम मेरे लिए। खैर मुझे पता है कि ऐसा करने का एक अच्छा कारण हो सकता है .. मैक्रोज़ का उपयोग कर कोड में enum/struct परिभाषा को छिपाने का वास्तविक कारण क्या है?
क्या हो रहा है यह समझने के लिए मुझे अक्सर जीसीसी विकल्प '-dNI -E' के साथ एक स्रोत संकलित करना उपयोगी लगता है जिसके परिणामस्वरूप प्रीप्रोसेस्ड स्रोत होता है, लेकिन मैक्रोज़ परिभाषित किए बिना मैक्रो परिभाषाओं को दिखाता है, '# शामिल' कथन बरकरार है। –
नीचे दिए गए उत्तरों में यह है।इस रणनीति के लिए एक सामान्य नाम "एक्स मैक्रो" है, विकिपीडिया इसके बारे में एक पृष्ठ है: http://en.wikipedia.org/wiki/X_Macro के रूप में करता है डॉ Dobbs: http://www.drdobbs.com/cpp/the -x-मैक्रो/228700289 – Vicky
@Vicky drdobbs लिंक एक रत्न था! धन्यवाद! – ashishsony