c - Utility of macros for enum -


मेरे लिनक्स सिस्टम पर एक हेडर socket.h निम्न की तरह दिखता है।

< पूर्व> / * फ्लेग्स तर्क में बिट्स 'भेजें', 'रिक', एट अल * / Enum {MSG_OOB = 0x01, / * आउट-ऑफ-बैंड डेटा की प्रक्रिया * / #define MSG_OOB MSG_OOB MSG_PEEK = 0x02, / * इनकमिंग संदेशों पर झांकना * / #define MSG_PEEK MSG_PEEK MSG_DONTROUTE = 0x04, / * स्थानीय रूटिंग का उपयोग न करें। * / #define MSG_DONTROUTE MSG_DONTROUTE ...

enum परिभाषित एक की तरह है कि भाषा वास्तव में के रूप में संकलन समय स्थिरांक व्यवहार करता है।

< P> मेरा प्रश्न यह है कि मैक्रोज़ MSG_OOB , MSG_PEEK की परिभाषा क्या है, जो खुद को विस्तारित करते हैं?

< div class = "के बाद पाठ" itemprop = "पाठ">

POSIX मानक जनादेश है कि इस तरह MSG_DONTROUTE हो "वस्तु की तरह मैक्रो" के बजाय enumerants के रूप में "प्रतीकात्मक स्थिरांक"। उन्हें स्वयं को परिभाषित करने से उन्हें गणण के संदर्भ में, साथ ही ठीक से काम करने की अनुमति मिलती है, उदाहरण के लिए, #ifdef

POSIX मानक से:

हैडर निम्नलिखित प्रतीकात्मक स्थिरांक को परिभाषित करेगा .... MSG_DONTROUTE

और:

प्रतीकात्मक निरंतर ... को संदर्भित करता है एक सी पूर्वप्रक्रमक प्रतीक (यह भी तर्क के बिना)

और अंत में, एक परिशिष्ट से।

कहाँ एक निरंतर मैक्रो होना करने के लिए आवश्यक है लेकिन यह भी है इस तरह के एक गणना स्थायी, कार्यान्वयन करना, जिससे यह निरंतर मैक्रो की एक अन्य प्रकार के रूप में परिभाषित करते हैं आम तौर पर परिभाषित किया गया है पर के रूप में निरंतर का एक और प्रकार होने की अनुमति इस प्रकार है:

<कोड> #define macro_name macro_name

यह अनुप्रयोगों को #ifdef, आदि का उपयोग करने की अनुमति देता है यह निर्धारित करने के लिए कि मैक्रो परिभाषित है या नहीं, लेकिन मैक्रो #profprocessor निर्देशों में उपयोग करने योग्य नहीं है क्योंकि प्रीप्रोसेसर अनपेक्षित शब्द मा का इलाज करेगा मूल्य शून्य होने पर cro_name।


Comments