(void)

2010-06-14 9 views
5

के साथ फ़ंक्शन को उपसर्ग करने की आवश्यकता है, मैंने हाल ही में एक असामान्य कोडिंग सम्मेलन में आया था जिसमें "शून्य" लौटने वाले फ़ंक्शन के लिए कॉल (शून्य) के साथ उपसर्ग किया गया है।(void)

उदा।

(void) MyFunction(); 

ऐसा समारोह कॉल से किसी भी अलग है:

MyFunction(); 

यह किसी भी लाभ मिला है या यह अभी तक एक और अनावश्यक है, लेकिन किसी प्रकार की वहाँ कोडिंग सम्मेलन है?

उत्तर

12

printf() जैसे कुछ फ़ंक्शंस एक ऐसे मान को वापस करते हैं जो वास्तविक कोड में कभी भी उपयोग नहीं किया जाता है (printf के मामले में, मुद्रित वर्णों की संख्या)। हालांकि, कुछ उपकरण, फाहा की तरह, उम्मीद करते हैं कि एक समारोह एक मान देता है, तो इसका इस्तेमाल किया जाना चाहिए, और जब तक आप की तरह कुछ लिखने शिकायत:

(void) printf("hello"); 
: शून्य कलाकारों का उपयोग कर

int n = printf("hello"); 

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

+0

मुझे लगता है। लेकिन फिर कोई भी पहले से ही शून्य पर लौटने वाले फ़ंक्शन के लिए ऐसा क्यों करना चाहेंगे? – puffadder

+0

निश्चित रूप से, लेकिन उन्होंने कहा कि कास्ट उन कार्यों के लिए बनाया गया था जो शून्य लौटते हैं। – Artefacto

+4

@puffadder एक अनुमान में, फ़ंक्शन का रिटर्न प्रकार किसी बिंदु पर बदल गया, लेकिन कॉलिंग कोड नहीं हुआ। –

2

नहीं, कोई अंतर नहीं है - शून्य के लिए क्या किया जा रहा है कार्य का वापसी मूल्य है।

मैं कहूंगा कि यह समझ सकता है कि आप स्पष्ट करना चाहते हैं कि आप रिटर्न वैल्यू का उपयोग नहीं कर रहे हैं (आप इसे साइड इफेक्ट्स के लिए बुला रहे हैं), लेकिन जैसा कि फ़ंक्शन में पहले से ही शून्य वापसी है, यह ' ज्यादा समझ में नहीं आता है।

0

यदि फ़ंक्शन कुछ देता है तो शून्य कुछ चेतावनी (या) चेतावनी से बच सकता है (वास्तव में मैं जीसीसी को मुझे चेतावनी देता हूं कि वापसी मूल्य खो गया है) कुछ कंपाइलर्स (या लिंट टूल्स) पर; लेकिन सबसे महत्वपूर्ण बात यह है कि यह स्पष्ट करता है कि वापसी मूल्य जानबूझकर "फेंक दिया जाता है" (और गलती से नहीं)।

0

आकस्मिक रूप से: एक "फ़ंक्शन" हमेशा कुछ देता है, अन्यथा यह एक प्रक्रिया होगी। इसलिए इस कोड के लेखक का कहना है चाहता है "मुझे पता है यह नामकरण गलत है, लेकिन मैं कोई परिवर्तन नहीं नाम है, इसलिए मैं इस अशांति जाहिर कर देंगे"

0

यह किसी भी लाभ मिला है या यह अभी तक एक और अनावश्यक है, लेकिन वहाँ कुछ प्रकार के सम्मेलन कोडिंग?

कोई फर्क नहीं पड़ता। यह एक आम आम सम्मेलन है उदा। सॉफ़्टवेयर परीक्षण में इस तथ्य को हाइलाइट करने के लिए कि संदर्भ में फ़ंक्शन रिटर्न, यदि कोई हो, तो त्यागना सुरक्षित है।

0

एचपीयूएक्स मैन पेजों में यह उदाहरण कोड में काफी आम है, जो कि लिंट चेतावनियों के बारे में जानने के लिए एक कास्ट देखने के लिए कोड है।

fprintf(mystream, "%s\n", "foo"); 

बनाम

(void)fprintf(mystream, "%s\n", "foo"); 

कि हो सकता है, जहां कोड के लेखक की ओर से आ रहा है। आईएमओ, यह एक अच्छा विचार नहीं है क्योंकि अधिकांश स्प्रिंटफ परिवार, उदाहरण के लिए, मॉलोक को कॉल करें। पर्याप्त स्मृति नहीं होने पर malloc विफल हो जाएगा।SIGINT प्रिंटफ() परिवार के सदस्यों के लिए अंतर्निहित लेखन() syscall को बाधित करने और सभी बफर नहीं लिखने का कारण बनता है।

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