मैं एक मैक्रो लिखना चाहता हूं जो उसके पैरामीटर के बूलियन मान के आधार पर कोड थूकता है। तो DEF_CONST(true)
को const
में विस्तारित किया जाना चाहिए, और DEF_CONST(false)
को कुछ भी नहीं बढ़ाया जाना चाहिए।सी प्रीप्रोसेसर: #define के अंदर #if का उपयोग कर?
जाहिर निम्नलिखित काम नहीं करता है, क्योंकि हम #defines अंदर एक और पूर्वप्रक्रमक का उपयोग नहीं कर सकते हैं:
#define DEF_CONST(b_const) \
#if (b_const) \
const \
#endif
इसे कैसे करना के बारे में कोई विचार? इसके अलावा
#define DEF_CONST(b_const) DEF_CONST_##b_const
#define DEF_CONST_true const
#define DEF_CONST_false
फिर,
/* OK */
DEF_CONST(true) int x; /* expands to const int x */
DEF_CONST(false) int y; /* expands to int y */
/* NOT OK */
bool bSomeBool = true; // technically not C :)
DEF_CONST(bSomeBool) int z; /* error: preprocessor does not know the value
of bSomeBool */
, मैक्रो पैरामीटर प्रदान करने के स्वयं (जैसा की सही ढंग से GMAN और अन्य लोगों द्वारा बताया) DEF_CONST के लिए अनुमति देता है:
इस की बात क्या है? क्या आपके पास एक ठोस उदाहरण है, क्योंकि यह अजीब लगता है ... –
यह भी देखें। उपरोक्त में –
Rhubbarb