c - "सी प्रोग्रामिंग लैंग्वेज" पुस्तक में कहा गया है कि मुझे मॉलोक कास्ट करना चाहिए?



casting malloc (1)

http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm :

पूर्व- ANSI C में - जैसा कि K & R-1 में वर्णित है - मॉलॉक () ने एक char * लौटाया और सभी मामलों में अपना रिटर्न मूल्य डालना आवश्यक था जहां प्राप्त करने वाला चर भी नहीं था char * । मानक C में नया void * प्रकार इन अंतर्विरोधों को अनावश्यक बनाता है।

K & R-2 की रक्षा के लिए अनावश्यक रूप से छलांग लगाने की शर्मिंदगी से किसी को बचाने के लिए, मैंने डेनिस रिची से एक राय मांगी, जिसे मैं पृष्ठ 142 से ऊपर उद्धृत वाक्य की वैधता पर उद्धृत कर सकता हूं। उन्होंने जवाब दिया:

किसी भी मामले में, अब मैं पी पर सामान को फिर से भर देता हूं। 142, मुझे लगता है कि यह गलत है; यह इस तरह से लिखा गया है कि यह पहले के नियमों के खिलाफ रक्षात्मक नहीं है, यह एएनएसआई के नियमों को गलत ठहराता है।

आज मैं द सी प्रोग्रामिंग लैंग्वेज (दूसरा संस्करण ब्रायन डब्ल्यू। कर्निघन एंड डेनिस एम। रिची) के पेज 167 पर पहुंचा और पाया कि लेखक कहता है कि मुझे malloc कास्ट करना होगा। यहाँ पुस्तक से हिस्सा है:

7.8.5 संग्रहण प्रबंधन

फ़ंक्शन मॉलोक और कॉलोक गतिशील रूप से मेमोरी के ब्लॉक प्राप्त करते हैं।

void *malloc(size_t n)

यदि अनुरोध को संतुष्ट नहीं किया जा सकता है, तो एक सूचक को गैर-संचित भंडारण के बाइट्स, या NULL पर लौटाता है।

void *calloc(size_t n, size_t size)

निर्दिष्ट आकार की n ऑब्जेक्ट्स की सरणी के लिए पर्याप्त खाली स्थान के लिए एक पॉइंटर लौटाता है, या यदि अनुरोध संतुष्ट नहीं किया जा सकता है तो NULL। भंडारण शून्य से शुरू होता है। मालकॉक या कॉलोक द्वारा लौटाए गए सूचक में प्रश्न में ऑब्जेक्ट के लिए उचित संरेखण है, लेकिन इसे उचित रूप में डाला जाना चाहिए, जैसे कि

int *ip;
ip = (int *) calloc(n, sizeof(int));

मैं पहले से ही जानता हूं कि malloc (और उसका परिवार) टाइप * शून्य देता है, और अच्छे स्पष्टीकरण हैं कि क्यों malloc कास्ट नहीं किया जाता है

लेकिन मेरा सवाल यह है: पुस्तक क्यों कहती है कि मुझे इसे डालना चाहिए?





kernighan-and-ritchie