मैं कोड की निम्न पंक्ति के बारे में एक ई-मेल के माध्यम से तर्क पढ़ रहा हूँ:क्या एएनएसआई सी वास्तव में निर्दिष्ट करता है कि छोटे पूर्णांक को टाइपकास्टिंग करते समय कौन से बाइट्स का उपयोग किया जाता है?
p = (unsigned char)random();
यादृच्छिक समारोह एक लंबे देता है, और किसी का कहना है कि इस वजह से यह संभव है असुरक्षित है कि समान किरदार MSB ले के बजाय हो सकता है एलएसबी मुझे पता है कि x86 पर टाइपकास्ट एलएसबी वापस कर देगा, लेकिन मुझे यह जानकारी नहीं मिल सकती है कि यह वास्तव में एएनएसआई सी द्वारा अनिवार्य है या नहीं, या यह उन कार्यान्वयन-विशिष्ट "अपरिभाषित व्यवहार" में से एक है।
प्रश्न दिलचस्प है और जानने के लायक उत्तर है, लेकिन वास्तविक कोड में, किसी को भ्रम को दूर करने का प्रयास करना चाहिए। दूसरे शब्दों में, यदि आप इस पर कोड बदलते हैं, तो बाइट का उपयोग करने के बारे में कोई सवाल नहीं है: 'p = (unsigned char) (यादृच्छिक()% 256)'। यह आपके कोड के भविष्य के पाठक को एक ही चीज़ पर आश्चर्यचकित करने से रोक देगा। एक सामान्य नियम के रूप में, आपको कोड नहीं लिखना चाहिए जो समझने के मानकों के विवरणों के विस्तृत ज्ञान पर निर्भर करता है। –
वास्तव में कलाकार अनावश्यक है; आप किसी भी संख्यात्मक प्रकार को किसी अन्य संख्यात्मक प्रकार में असाइन कर सकते हैं, और इसे पूरी तरह से एक कलाकार द्वारा रूपांतरित किया जाएगा। –
@ किथ थॉम्पसन: संकलक चेतावनी दे सकते हैं कि संभावित रूप से हानिकारक रूपांतरण का उपयोग बिना किसी कलाकार के किया जाता है, हालांकि ... – Christoph