किसी सरणी में तत्वों की संख्या की गणना के लिए sizeof (TYPE) से अधिक आकार (तत्व) क्यों पसंद करते हैं?


15

मैं "किंग केएन सी प्रोग्रामिंग" पढ़ रहा हूं और निम्नलिखित कथन पाया:

हमने sizeof(a)/sizeof(a[0])एक सरणी में तत्वों की संख्या की गणना करने के लिए अभिव्यक्ति का उपयोग करते हुए चर्चा की । अभिव्यक्ति sizeof(a)/sizeof(t), जहां टी एक तत्व का प्रकार है, यह भी काम करेगा, लेकिन इसे एक अवर तकनीक माना जाता है।

इसे एक हीन तकनीक क्यों माना जाता है?


8
क्या आपने विचार किया कि यदि प्रोग्रामर तत्वों के प्रकार को एक में बदल दे तो क्या होगा? टी से अलग आकार वाले एक प्रकार के लिए। पहली अभिव्यक्ति अभी भी ठीक है, जबकि दूसरा टूट जाएगा
gnat

1
@ नागट: आपको इसका जवाब देना चाहिए।
मार्टिन

जवाबों:


26

sizeof(a)/sizeof(t)स्पष्ट रूप से अभिव्यक्ति में प्रकार कोड। अब आपके पास कई स्थानों में निर्दिष्ट प्रकार है, जिसमें यह सुनिश्चित करने के लिए कोई कंपाइलर समर्थन नहीं है कि आप एक ही प्रकार का उपयोग कर रहे हैं। इसलिए, यदि आप सरणी के आधार प्रकार को बदलते हैं, लेकिन (पूरी तरह से अलग) गणना अभिव्यक्ति में नहीं है, तो बिंगो: आपका कोड बस ठीक संकलन करेगा, लेकिन आपका तत्व गणना गलत होगा। यदि आप भाग्यशाली हैं तो आपका कार्यक्रम दुर्घटनाग्रस्त हो जाएगा, लेकिन यदि यह पूरी तरह से सही ढंग से काम नहीं करेगा, लेकिन हर एक बार पूरी तरह से पूरी तरह से व्यवहार करेगा।

sizeof(a)/sizeof(a[0])सही होने की गारंटी है, केवल सरणी के नाम की आवश्यकता है। प्रकार बदलें और आप ठीक हैं; सरणी नाम बदलें और कंपाइलर शिकायत करेगा। किसी सोच की आवश्यकता नहीं: हमें उस तरह की प्रोग्रामिंग पसंद है।


खैर, मैं वास्तव में पसंद करता हूं sizeof a/sizeof*a, भले ही यह वास्तव में एक महत्वपूर्ण अंतर नहीं है।
डेडूपिलेटर 16
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.