बिट फ़ील्ड एक ही अर्थ में गैर-पोर्टेबल हैं क्योंकि पूर्णांक गैर-पोर्टेबल हैं। आप एक पोर्टेबल प्रोग्राम लिखने के लिए पूर्णांक का उपयोग कर सकते हैं, लेकिन आप रिमोट मशीन के रूप में int
का द्विआधारी प्रतिनिधित्व भेजने की उम्मीद नहीं कर सकते हैं और उम्मीद कर सकते हैं कि यह सही ढंग से डेटा की व्याख्या करे।
ऐसा इसलिए है क्योंकि 1. प्रोसेसर की शब्द लंबाई भिन्न होती है, और इसके कारण, पूर्णांक प्रकारों के आकार भिन्न होते हैं (1.1 बाइट लंबाई भी भिन्न हो सकती है, लेकिन यह दिन एम्बेडेड सिस्टम के बाहर दुर्लभ है)। और क्योंकि 2. बाइट एंडियननेस प्रोसेसर में अलग है।
इन समस्याओं को दूर करना आसान है। मूल अंतराल को आसानी से अंतहीनता पर सहमत किया जा सकता है (बड़े एंडियन नेटवर्क संचार के लिए वास्तविक तथ्य है), और आकार का संकलन समय पर निरीक्षण किया जा सकता है और निश्चित लंबाई पूर्णांक प्रकार इन दिनों उपलब्ध हैं। इसलिए पूर्णांक का उपयोग पूरे नेटवर्क में संवाद करने के लिए किया जा सकता है, जब तक कि इन विवरणों का ध्यान रखा जाता है।
बिट फ़ील्ड नियमित पूर्णांक प्रकारों पर निर्माण करते हैं, इसलिए उन्हें अंतहीनता और पूर्णांक आकारों के साथ समान समस्याएं होती हैं। लेकिन उनके पास even more कार्यान्वयन निर्दिष्ट व्यवहार है।
वर्ग वस्तु के भीतर बिट क्षेत्रों की वास्तविक आवंटन विवरण
- उदाहरण के लिए, कुछ प्लेटफार्मों पर, बिट क्षेत्रों बाइट्स में फैल गए नहीं है, दूसरों को वे
- करना पर बारे में सब कुछ इसके अलावा, कुछ प्लेटफार्मों पर, बिट फ़ील्ड बाएं से दाएं पैक होते हैं, अन्य पर दाएं से बाएं
चाहे चा आर, लघु, int, लंबा, और लंबे लंबे फ़ील्ड जो स्पष्ट रूप से हस्ताक्षरित या हस्ताक्षरित नहीं हैं हस्ताक्षरित या हस्ताक्षरित हैं।
endianness के विपरीत, यह "सब कुछ वास्तविक आवंटन विवरण के बारे में" एक विहित प्रपत्र में बदलने के लिए तुच्छ नहीं है।
इसके अलावा, जबकि अंतहीनता सीपीयू आर्किटेक्चर विशिष्ट है, बिट फ़ील्ड विवरण कंपाइलर कार्यान्वयन के लिए विशिष्ट हैं। इसलिए, बिट फ़ील्ड एक ही कंप्यूटर के भीतर अलग प्रक्रियाओं के बीच भी संचार के लिए पोर्टेबल नहीं हैं, जब तक कि हम गारंटी नहीं दे सकते कि उन्हें एक ही (संस्करण) कंपाइलर का उपयोग करके संकलित किया गया था।
टीएल; डीआर बिट फ़ील्ड कंप्यूटर के बीच संवाद करने के लिए एक पोर्टेबल तरीका नहीं हैं। इंटीजर या तो नहीं हैं, लेकिन उनकी गैर पोर्टेबिलिटी काम करना आसान है।
किस संदर्भ में उन्हें "असुरक्षित" कहा जाता था? एक लिंक जोड़ें? – anatolyg
मुझे लगता है कि ज्यादातर लोग उप-बाइट स्तर पर अन्य डेटा प्रकारों के प्रतिनिधित्व के टुकड़ों को निकालने के लिए बिटफील्ड का दुरुपयोग करते हैं, जो पूरी तरह गैर-पोर्टेबल है। – user2357112
@anatolyg [लुंडिन की टिप्पणी] (http://stackoverflow.com/questions/35934375/bitfields-in-c-programming-language/35935493#comment59526628_35934375) [इस प्रश्न पर] (http://stackoverflow.com/questions/ 35934375/bitfields-इन-सी प्रोग्रामिंग भाषा/35,935,493)। माना जाता है कि मैंने उन्हें 'असुरक्षित' होने का आरोप नहीं लगाया है जितना मेरे पास 'पोर्टेबल' है, लेकिन फिर भी। – Pharap