void f()
का अर्थ है कि f
कुछ भी नहीं देता है। यदि void
कुछ भी नहीं देता है, तो हम इसका उपयोग क्यों करते हैं? void
का मुख्य उद्देश्य क्या है?यदि शून्य() कोई मान वापस नहीं करता है, तो हम इसका उपयोग क्यों करते हैं?
उत्तर
जब सी का आविष्कार किया गया था तो सम्मेलन यह था कि, यदि आपने रिटर्न प्रकार निर्दिष्ट नहीं किया है, तो संकलक स्वचालित रूप से अनुमान लगाता है कि आप int
(और पैरामीटर के लिए समान हैं) वापस करना चाहते हैं।
लेकिन अक्सर आप ऐसे काम लिखते हैं जो सामान करते हैं और कुछ भी वापस करने की आवश्यकता नहीं होती है (सोचें कि एक फ़ंक्शन के बारे में जो सिर्फ स्क्रीन पर कुछ प्रिंट करता है); इस कारण से, यह निर्णय लिया गया था कि, यह निर्दिष्ट करने के लिए कि आप कुछ भी वापस नहीं करना चाहते हैं, आपको void
कीवर्ड को "रिटर्न टाइप" के रूप में उपयोग करना होगा।
ध्यान रखें कि void
भी अन्य प्रयोजनों के कार्य करता है; विशेष रूप से:
यदि आप एक कार्यों के लिए मानकों की सूची के रूप में यह निर्दिष्ट करते हैं, इसका मतलब है कि समारोह कोई पैरामीटर लेता है; सी में इसकी आवश्यकता थी, क्योंकि पैरामीटर के बिना एक फ़ंक्शन घोषणा संकलक के लिए थी कि पैरामीटर सूची को बस निर्दिष्ट नहीं किया गया था। सी ++ में इसकी अब आवश्यकता नहीं है, क्योंकि खाली पैरामीटर सूची का अर्थ है कि फ़ंक्शन के लिए कोई पैरामीटर अनुमति नहीं है;
void
पॉइंटर्स में भी एक महत्वपूर्ण भूमिका है;void *
(और इसकी विविधताएं) का अर्थ है "कुछ निर्दिष्ट करने के लिए पॉइंटर निर्दिष्ट नहीं है"। यह उपयोगी है अगर आपको उन कार्यों को लिखना है जो वास्तव में उनका उपयोग किए बिना पॉइंटर्स को स्टोर/पास करना चाहिए (केवल अंत में, पॉइंटर का उपयोग करने के लिए, उपयुक्त प्रकार के लिए एक कास्ट आवश्यक है)।भी,
(void)
पर एक कास्ट अक्सर जानबूझकर अप्रयुक्त, संकलक चेतावनियों को दबाकर मान को चिह्नित करने के लिए उपयोग किया जाता है।int somefunction(int a, int b, int c) { (void)c; // c is reserved for future usage, kill the "unused parameter" warning return a+b; }
वास्तव में क्या "(शून्य) सी" कर रहा है? – innochenti
स्पष्ट रूप से दाईं ओर अभिव्यक्ति के मूल्य को त्याग देता है। यह वैसे भी करेगा यदि आपने '(शून्य)' नहीं लिखा है, लेकिन यह स्पष्ट करता है (पाठक और संकलक को) कि आप * वास्तव में * वापसी मूल्य की परवाह नहीं करते हैं; इसका उपयोग उन मामलों में कुछ चेतावनियों (अप्रयुक्त लौटा मूल्य, अप्रयुक्त पैरामीटर) को बंद करने के लिए किया जाता है जहां आप स्पष्ट रूप से उन मानों की परवाह नहीं करते हैं। दोबारा, इसका उत्पन्न कोड पर कोई विशेष प्रभाव नहीं पड़ता है, लेकिन यह एक मुहावरे है जो किसी विशेष अर्थ को व्यक्त करता है। –
@innochenti: उदाहरण देखें [यहां] (http://stackoverflow.com/a/4178714/214671) –
शायद संकलक को बताने के लिए "आपको सभी सीपीयू-रजिस्टरों को धक्का और पॉप करने की आवश्यकता नहीं है!"
हू ?! बुलाया गया फ़ंक्शन अभी भी उन रजिस्टरों को मिटा देगा, भले ही यह कोई मान न लौटाए। – Ant
क्योंकि कभी-कभी आपको वापसी मूल्य की आवश्यकता नहीं होती है। यही कारण है कि हम इसका इस्तेमाल करते हैं।
आप void
आपके पास नहीं था, तुम कैसे संकलक है कि एक समारोह एक मूल्य वापस नहीं करता है बताएंगे?
कुछ भी निर्दिष्ट नहीं करने के बारे में कैसे? जैसे। 'शून्य fooFunction() {} 'के बजाय बस सादा' fooFunction() {}'? –
@ एमिट टॉमर सी ++ में आप _must_ रिटर्न प्रकार निर्दिष्ट करते हैं। सी में कोई वापसी प्रकार 'int' का तात्पर्य नहीं है। –
मेरा मतलब था, सी ++ में ऐसा क्यों नहीं हो सकता था, यह कंपाइलर को बताने के लिए कि कोई फ़ंक्शन कोई मान नहीं देता है, वापसी प्रकार को खाली के रूप में छोड़ दें। विशेष प्रकार निर्दिष्ट करने के लिए, प्रकार लिखें। लिखने के लिए एक विशेष आवश्यकता क्यों शून्य?क्या यह एक डिजाइन निर्णय से अधिक है? –
सी, सी ++, जावा इत्यादि जैसी अनिवार्य प्रोग्रामिंग भाषाओं में, void
प्रकार के कार्यों और विधियों का उपयोग उनके दुष्प्रभावों के लिए किया जाता है। वे वापस आने के लिए एक सार्थक मूल्य नहीं बनाते हैं, लेकिन वे प्रोग्राम राज्य को कई संभावित तरीकों से प्रभावित करते हैं। उदाहरण के लिए, सी में exit
फ़ंक्शन कोई मूल्य नहीं देता है, लेकिन इसका आवेदन निरस्त करने का दुष्प्रभाव होता है। एक और उदाहरण, एक सी ++ वर्ग में एक शून्य विधि हो सकती है जो इसके आवृत्ति चर के मान को बदलती है।
असल में 'printf' मुद्रित वर्णों की संख्या के बराबर' int' मान देता है। –
@ पॉलर व्हाउप्स, आप सही हैं। क्या मेरा चेहरा लाल है ... – waldrumpus
@PaulR वैसे, मैं स्ट्राइकथ्रू टेक्स्ट कैसे करूं? मैं printf उदाहरण के माध्यम से हमला करना चाहता था ताकि आपकी टिप्पणी को अमान्य न किया जाए, लेकिन मैं इसे समझ नहीं पाया। – waldrumpus
शून्य() का अर्थ कुछ भी नहीं है।
void
कुछ भी नहीं मतलब यह नहीं है। void
एक प्रकार से कुछ भी प्रस्तुत नहीं करता है।यह एक सूक्ष्म अंतर है: प्रतिनिधित्व अभी भी आवश्यक है, भले ही यह कुछ भी प्रस्तुत न करे।
यह प्रकार समारोह के वापसी प्रकार जो कुछ भी नहीं देता है के रूप में प्रयोग किया जाता है। इसका उपयोग जेनेरिक डेटा का प्रतिनिधित्व करने के लिए भी किया जाता है, जब इसे void*
के रूप में उपयोग किया जाता है। तो यह मनोरंजक लगता है कि void
का प्रतिनिधित्व करता है, void*
सब कुछ का प्रतिनिधित्व करता है!
कभी-कभी इसे वापस करने के बजाए कुछ प्रिंट करने के लिए इसका उपयोग किया जा सकता है। (के रूप में यह पता चला है, यह एक भयानक विचार था) सी ++ सी से उधार लिया, और सी परोक्ष सब कुछ int
के रूप में untyped टाइप करने के लिए प्रयोग किया है: उदाहरण
क्या आप थोड़ा सा समझाते हैं? – Shahbaz
यह सवाल भाषा के इतिहास के साथ क्या करना है के लिए http://en.wikipedia.org/wiki/Mutator_method#C_example देखें। इसमें कार्य शामिल थे जो प्रक्रियाओं के रूप में लक्षित थे (याद रखें कि कार्यों और प्रक्रियाओं के बीच का अंतर यह है कि फ़ंक्शन इनवोकेशन अभिव्यक्तियां हैं, जबकि प्रक्रिया आमंत्रण विवरण हैं)। अगर मैं इसे जल्दी सी किताबें पढ़ने से सही ढंग से याद करते हैं, प्रोग्रामर एक #define
साथ इस कमी को पैच करने के लिए प्रयोग किया है:
#define void int
यह सम्मेलन बाद में सी मानक में अपनाया गया है, और void
कीवर्ड कार्यों को निरूपित करने के शुरू किया गया है जो प्रक्रियाओं के रूप में लक्षित हैं। यह बहुत उपयोगी था, क्योंकि कंपाइलर अब जांच सकता है कि आपका कोड उस फ़ंक्शन से रिटर्न वैल्यू का उपयोग कर रहा है, जिसका उद्देश्य कुछ भी वापस करने का इरादा नहीं था, और आपको उन फ़ंक्शंस के बारे में चेतावनी देने के लिए जो वापस लौटना चाहिए लेकिन नियंत्रण को अंत में बंद कर दें।
+1 क्योंकि मैंने पुराने कोड में यह 'परिभाषित' कथन देखा था, एक बेतुका लेबल के साथ 'ifdef' द्वारा अवरुद्ध किया गया था, और यह पता नहीं लगा कि किसी ने इसे क्यों लिखा था। –
कारण कुछ स्थितियों पर विचार करें जहां आपको वैश्विक चर पर कुछ गणना करना पड़ सकता है और परिणाम वैश्विक वैरिएबल में डाल सकते हैं या आप तर्कों के आधार पर कुछ प्रिंट करना चाहते हैं .. इन परिस्थितियों में आप उस विधि का उपयोग कर सकते हैं जो मूल्य वापस नहीं कर सकता । .. यानी शून्य
यहाँ एक उदाहरण समारोह है:
struct SVeryBigStruct
{
// a lot of data here
};
SVeryBigStruct foo()
{
SVeryBigStruct bar;
// calculate something here
return bar;
}
और अब यहाँ एक और समारोह है:
void foo2(SVeryBigStruct& bar) // or SVeryBigStruct* pBar
{
bar.member1 = ...
bar.member2 = ...
}
दूसरा कार्य तेज है, इसे पूरी संरचना की प्रतिलिपि बनाने की आवश्यकता नहीं है।
- 1. यदि आप C++ में कोई मान वापस नहीं करते हैं तो क्या होता है?
- 2. यदि कोई विधि का रिटर्न प्रकार शून्य है तो मैं वापस क्या करूँ? (शून्य नहीं!)
- 3. यदि ब्राउज़र सीएसएस को अनदेखा करता है तो वे आधुनिकता का उपयोग क्यों नहीं करते हैं?
- 4. GROUP_CONCAT वापस शून्य अगर कोई मान शून्य
- 5. कनवर्ट क्यों करें। टॉस्ट्रिंग (शून्य) यदि आप शून्य डालते हैं तो एक अलग मान लौटाते हैं?
- 6. क्या हम jQuery घोषित करते हैं या हम इसका उपयोग करते हैं?
- 7. यूनिक क्यों करता है! अगर कोई डुप्लिकेट नहीं है तो
- 8. हम serialization का उपयोग क्यों करते हैं?
- 9. यह निर्धारित करता है कि कोई मान शून्य है, यदि सत्य है तो गलत, अन्यथा सही
- 10. AndroidTestCase.getContext()। GetAplicationContext() वापस शून्य क्यों करता है?
- 11. BitmapFactory.decodeByteArray वापस शून्य क्यों करता है?
- 12. यदि मूल्य शून्य है तो मैं एक sqldatareader को मान कैसे वापस कर सकता हूं?
- 13. हम इसका उपयोग करने के बाद 'System.out` स्ट्रीम क्यों बंद नहीं करते हैं?
- 14. असाइनमेंट ऑपरेटर एक मान वापस क्यों करता है, संदर्भ नहीं?
- 15. हम रिफैक्टर क्यों करते हैं?
- 16. हम उत्प्रेरक के संदर्भ वस्तु का उपयोग क्यों करते हैं? इसका उद्देश्य क्या है?
- 17. क्रोम और आईई कभी भी नहीं भेजेगा यदि अन्य ब्राउज़र करते हैं तो कोई-नहीं-मैच?
- 18. Mongoid, यदि कोई मान सेट किया गया है तो दायरा?
- 19. कॉलम मान का चयन करें यदि शून्य नहीं है तो अन्य कॉलम मान
- 20. यदि कोई कॉलम शून्य है
- 21. हम संग्रहित प्रक्रिया से एक शून्य वापस कर सकते हैं
- 22. यदि असीसी ऑपरेटर निश्चित हैं, तो यूनिकोड प्रतीक क्यों नहीं?
- 23. यदि इनपुट मान रिक्त है, तो जावास्क्रिप्ट
- 24. हम इसका उपयोग क्यों करते हैं, अन्यथा अगर ब्लॉक के लिए एकाधिक ब्लॉक के बजाय यदि ब्लॉक एक रिटर्न स्टेटमेंट
- 25. यदि कुंजी मौजूद नहीं है तो डिफ़ॉल्ट मान
- 26. जब हमें कोई विनाशक नहीं है तो हम SuppressFinalize को क्यों कॉल कर सकते हैं
- 27. स्तंभ अद्यतन नहीं करते हैं अद्यतन मान शून्य
- 28. हम प्रोग्रामिंग में रेडियंस का उपयोग क्यों करते हैं?
- 29. यदि कोई इंट शून्य नहीं हो सकता है, तो null.asInstanceOf [int] का क्या अर्थ है?
- 30. यदि कोई विधि इंटरफ़ेस लौटाती है, तो इसका क्या अर्थ है?
कुछ भी वापस करने के लिए, obv। एक फ़ंक्शन जिसमें केवल दुष्प्रभाव होते हैं और गणना किए गए मान को वापस नहीं करते हैं, वह पूरी तरह वैध है। –