लांग-ish कहानी कम:
यह एक ऐसा मैक्रो जीसीसी का एक सेट विशेषताओं के लिए विस्तारित है। वे आपके कोड में विभिन्न सामानों के बारे में विशेष जानकारी के साथ कंपाइलर प्रदान करने का एक तरीका हैं, जैसे, इस मामले में, एक फ़ंक्शन।
इस उद्देश्य के लिए विभिन्न कंप्यूटर्स के अलग-अलग वाक्यविन्यास हैं, यह स्टैंडबाइज्ड नहीं है। उदाहरण के लिए, जीसीसी गुणों का उपयोग करता है, लेकिन अन्य कंपाइलर्स विभिन्न संरचनाओं का उपयोग करते हैं।
लांग-ish कहानी लंबी ish:
तो, मैं कोई लिनक्स कर्नेल विशेषज्ञ हूँ, लेकिन स्रोत कोड द्वारा पहचानने, इस मैक्रो Hotplug के लिए प्रयोग किया जाता है। मेरा मानना है कि यह दर्शाता है कि फ़ंक्शन को एक विशिष्ट डिवाइस से बाहर निकलना चाहिए।
उदाहरण के लिए, आपके द्वारा प्रदान किया गया फ़ंक्शन रीयलटेक पीसीआई-एक्सप्रेस कार्ड रीडर ड्राइवर के साथ काम करने के लिए हॉटप्लग फ़ंक्शंस के सेट से प्रतीत होता है।
वह मैक्रो वास्तव में क्या करता है? ठीक है, मैक्रो की परिभाषा को करीब से नज़र डालें:
#define __devexit __section(.devexit.text) __exitused __cold
पहले भाग __section(.devexit.text)
है:
# define __section(S) __attribute__ ((__section__(#S)))
आप देख सकते हैं, इस धारा के नाम से किया जा रहा ".devexit.text"
के साथ एक __attribute__(__section__())
पैदा करता है। इसका अर्थ यह है कि जीसीसी संकलित बाइनरी में नामित अनुभाग में .devexit.text
(डिफ़ॉल्ट खंड के बजाय) के साथ इस विशेषता के साथ एक समारोह के असेंबली कोड को संकलित करेगा।
दूसरे भाग __exitused
(कुछ करने के लिए परिभाषित MODULE
मैक्रो परिभाषित किया गया है केवल अगर) है:
#define __exitused __used
और __used
, है जीसीसी संस्करण के आधार पर, परिभाषित या तो इस तरह:
# define __used __attribute__((__used__))
या इस तरह:
# define __used __attribute__((__unused__))
पूर्व यह सुनिश्चित करता है कि इस विशेषता वाले फ़ंक्शन को संकलित किया गया हो, भले ही इसे कहीं भी संदर्भित न किया जाए। उत्तरार्द्ध एक ही मामले में संकलक चेतावनियों को दबाता है, हालांकि यह संकलन को किसी भी तरह से प्रभावित नहीं करता है।
और अंत में, __cold
:
#define __cold __attribute__((__cold__))
यह एक विशेषता है जो संकलक कि इस विशेषता के साथ समारोह, अक्सर के नाम से जाना इतना है कि यह उसके अनुसार अनुकूलन कर सकते हैं नहीं जा रहा है आपको सूचित करता है।
Sooo, अंत में हमारे पास क्या है? ऐसा लगता है कि __devexit
के साथ चिह्नित फ़ंक्शंस हैं जो केवल (यदि बिल्कुल कहा जाता है) नहीं कहा जाता है, और नामित अनुभाग में भरा हुआ है।
सभी स्रोत कोड here से लिया गया था। ऐसा लगता है कि मैक्रो अब वास्तव में removed from the Linux Kernel रहा है।
यह इस प्रश्न पर दो प्रयास है। ऐसा लगता है कि पहला प्रयास इतना विवरण था कि इसे अनुत्तरित किया गया था। मैं सवाल को हटाना चाहता था, लेकिन स्टैक-ओवरफ्लो ने चेतावनी दी थी कि यह डूब गया था, और मुझे लगा कि एक संपादन पिछले उत्तरों को पीछे से अप्रासंगिक रूप से अप्रासंगिक बना देगा। अगर कोई इसके बजाय संपादन/हटाना चुनने की सिफारिश करता है, तो मुझे बताएं। – Kenkron
आप उस '__devexit' प्रतीक पर राइट क्लिक क्यों नहीं करते हैं, इसकी परिभाषा पर जाएं और अपने आप को देखें कि इसका क्या अर्थ है ??? यह संभवतः एक बाहरी उपकरण द्वारा पूर्वनिर्धारित चेतावनियां उत्पन्न करने के लिए उपयोग की जाने वाली एक एनोटेशन है जो कोडिंग शुद्धता या उसके जैसा कुछ कोड करने की जांच करता है। –
यह यूनिक्स कर्नेल में कुछ मैक्रो है: http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/init.h – SomethingSomething