मेमसेट () रिटर्न वैल्यू का क्या उपयोग है?


89

memset()को रिटर्न के लिए घोषित void*किया जाता है जो कि फ़ंक्शन में दिए गए पते के समान ही मूल्य होता है।

वापसी मूल्य का उपयोग क्या है? क्यों नहीं लौटता void?



2
वापसी मूल्य का क्या उपयोग है strcat()? कभी-कभी, मानक कार्य वे होते हैं जो वे निर्दिष्ट होते हैं, न कि वे क्या होने चाहिए
DevSolar

4
@ मैथ्यूएमएम .: इसके अलावा, सामान्‍यत: नॉन-जीरो कॉस्‍ट है जो रिटर्निंग सामान से जुड़ा है। भले ही रिटर्न मान एक रजिस्टर में फिट बैठता है, आपको आमतौर पर उस मूल्य को रजिस्टर में लोड करना होगा। यह एक लागत है, हालांकि छोटा है।
एनपीई

15
@ शेराप्यूट: एक "सभी मनुष्यों को मार डालो" फ़ंक्शन निश्चित रूप से मारे गए मनुष्यों की संख्या को वापस करेगा।
व्यक्ति

2
@ मैथ्यूएमएम: आप इस तरह के सामान्य ज्ञान के बारे में चिंता नहीं करेंगे, लेकिन मैं निश्चित रूप से कर सकता हूं । क्या होगा यदि मैं एक सीमित संसाधन प्रणाली के लिए एक कंपाइलर लिख रहा हूँ? हममम?
थॉमस ईडिंग

जवाबों:


36

हस्ताक्षर अन्य सभी समान कार्यों के अनुरूप है: आदि memcpy(), strcpy()मैंने हमेशा सोचा था कि यह इस तरह के कार्यों के लिए एक श्रृंखला कॉल को सक्षम करने के लिए किया गया था, और अन्यथा अभिव्यक्ति में ऐसी कॉल का उपयोग करने के लिए।

उस ने कहा, मैं कभी भी एक वास्तविक दुनिया की स्थिति में नहीं आया हूं जहां मैं इस तरह से वापसी मूल्य का उपयोग करने के लिए मजबूर महसूस करूंगा।


122

इसका उपयोग कॉल चाइनिंग के लिए किया जा सकता है जैसे:

char a[200];
strcpy(memset(a, 0, 200), "bla");

9
हां, यह निश्चित रूप से 'जंजीर' उपयोग का मामला है।
कार्टेशियस ००

6
मैंने उत्तर को वापस ले लिया है, क्योंकि यह एक दिलचस्प मामला है। लेकिन वास्तविक जीवन में मुझे लगता है कि मेमसेट और स्ट्रैची कॉल्स को अलग रखना बेहतर है।
Tsvetomir दिमित्रोव

26
सी प्रोग्रामर अपठनीय कोड से प्यार करते हैं, इसलिए एक मानक फ़ंक्शन को डिज़ाइन करते समय असीम चेनिंग की अनुमति देना आवश्यक है।
चाड शोगिन्स

@ChadSchouggins कुछ हेकेल कोड पढ़ें और आप जानते हैं कि सी-प्रोग्रामर वास्तव में बहुत क्रियात्मक हैं;) (regex के बारे में सोचते हैं "ऑपरेटर" = ~) ...
BitTickler

बेशक इस उदाहरण में यह और भी समझ में आता होगा, दूसरे तरीके से, strcpyपिछले एक कॉपी किए गए पॉइंटर को वापस करने के लिए । memset(my_strcpy(a, "bla"), 0, a + 200);(जैसे std::copy_nऔर std::fill_nC ++ में करते हैं)।
alfC

12

फ़ंक्शन को किसी अन्य फ़ंक्शन जैसे तर्क के रूप में उपयोग करने के लिए sprintf


1

मुझे यह सवाल तब आया जब गोग्लिंग ने यह देखने के लिए कि क्या वापसी की थी।

मेरे पास कुछ कोड हैं जहां मैं एक मान के लिए परीक्षण करता हूं, फिर यदि कोई मान शून्य है तो यह देखने के लिए सही परीक्षण है।

क्योंकि शून्य के लिए परीक्षण करने के लिए सी में कोई पूरी तरह से पोर्टेबल तरीका नहीं है, मुझे बीच में मेमसेट चलाना होगा।

तो मेरा कोड है:

if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )

यह पिछले प्रश्नों में सूचीबद्ध चेनिंग उद्देश्य के लिए बोलता है, लेकिन यह इस तकनीक के लिए उपयोग का एक उदाहरण है।

मैं इसे दूसरों के लिए न्याय करने के लिए छोड़ दूंगा कि क्या यह अच्छा कोडिंग है या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.