2010-07-24 11 views
7

संभव डुप्लिकेट:
Why do people use __(double underscore) so much in C++सी भाषा में परिवर्तनीय नाम में डबल अंडरस्कोर का क्या अर्थ है?

मैं लिनक्स कर्नेल प्रोग्रामिंग कोड पढ़ाई कर रहा था।

__u32 len 

कैसे कि सामान्य चर से अलग है:

कुछ डाटा संरचनाओं और कार्य करता है जो एक डबल अंडरस्कोर से शुरू की तरह कर रहे हैं?

+0

http के असंख्य का उपयोग करना चाहिए: // stackoverflow। कॉम/प्रश्न/224397/क्यों-करो-लोग-उपयोग-डबल-अंडरस्कोर-बहुत-इन-सी –

+1

डुप्लिकेट से असहमत क्योंकि यह * लिनक्स कर्नेल * के बारे में है, जो सी है और सी ++ नहीं है, और कुछ बिंदुओं में इसकी अपनी दुनिया है। –

+0

http://stackoverflow.com/a/224420/1657476 पर देखें "पहचानकर्ताओं में दो अंडरस्कोर (' __ ') का उपयोग कंपाइलर के आंतरिक उपयोग के लिए ** एएनएसआई-सी मानक ** के अनुसार आरक्षित है। " –

उत्तर

12

इसका मतलब है कि यह एक सिस्टम-आरक्षित नाम है। सी मानक का कहना है कि दो अंडरस्कोर, या अंडरस्कोर और पूंजी पत्र से शुरू होने वाले सभी नाम सिस्टम या कंपाइलर के उपयोग के लिए आरक्षित हैं और उन्हें एप्लिकेशन कोड में परिभाषित नहीं किया जाना चाहिए।

+0

यदि इसकी अनुमति नहीं दी जानी चाहिए, तो यह उपयोग के लिए क्यों उपलब्ध है? सिस्टम द्वारा, क्या आपका मतलब ऑपरेटिंग सिस्टम है? –

1

यह एक प्रकार है, जिसे here (साथ ही कुछ अन्य स्थानों) में परिभाषित किया गया है।

यह परंपरा द्वारा है कि आमतौर पर एक प्रकार, परिवर्तनीय या फ़ंक्शन नाम के सामने एक डबल अंडरस्कोर एक मानक है जो हमेशा आरक्षित है, जैसा कि वर्तमान मानक (सी 99) की धारा 7.1.3 में परिभाषित किया गया है।

2

अन्य उत्तरों सही हैं कि यह कार्यान्वयन के लिए आरक्षित है। बेशक यहां लिनक्स 20 वीं सदी के बाहर अग्रिम और मानक प्रकार uint32_t बजाय गैरमानक नाम (__u32, u_int32_t, ...) है कि त्रस्त विरासत Unices ..

+0

उन प्रकारों को उसी तरह परिभाषित किया गया है जैसे वे मानक लाइब्रेरी हेडर (stdint.h) द्वारा परिभाषित किए गए हैं। यह इतना बड़ा सौदा क्यों है यदि ए) वे एक ही प्रकार के हैं और बी) वे उपयोगकर्ताओं के कार्यक्रमों के उपयोग के लिए निर्यात नहीं किए जाते हैं? –

+0

@mfukar संगति एक रखरखाव दृष्टिकोण से महत्वपूर्ण है। एक ही प्रकार के लिए दस अलग-अलग नामों का उपयोग न केवल संभावित संगतता समस्याओं का परिचय देता है, (कहें, जेनेरिक int के साथ मिश्रित विशिष्ट लंबे, यूंट, आदि प्रकारों का उपयोग करके, जिसका आकार प्लेटफॉर्म-निर्भर है), यह कोड पठनीयता को कम करता है। –

+0

मैंने कर्नेल सी कोड को समझने की कोशिश की लेकिन यह मेरे सिर पर जा रहा है। मुझे लगता है कि संरचनाओं के अंदर पॉइंटर्स या पॉइंटर फ़ंक्शन के साथ मुझे कम समझ है। क्या कोई सी पुस्तक है जहां मैं उन विषयों को अलग से पढ़ सकता हूं ताकि मैं कर्नेल कोड पढ़ सकूं। –

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