c - Is a^a or a-a undefined behaviour if a is not initialized? -


इस कार्यक्रम पर विचार करें:

  #include & lt; stdio.h & gt; Int main (शून्य) {अहस्ताक्षरित int a; प्रिंटफ़ ("% u% u \ n", एक ^ ए, ए-ए); वापसी 0; }  

क्या यह अपरिभाषित व्यवहार है?

इसके चेहरे पर, a एक अनिर्मीकृत चर है ताकि अपरिभाषित व्यवहार को इंगित किया जा सके लेकिन a ^ a और aa के बराबर 0 के सभी मानों के लिए a , कम से कम मुझे लगता है कि यह है मुकदमा। क्या यह संभव है कि यह तर्क देने का कोई तरीका है कि व्यवहार अच्छी तरह से परिभाषित है?

में C11: < / P>

  • यह स्पष्ट रूप से 6.3.2.1/2 के अनुसार अनिर्धारित है यदि a इसका पता कभी नहीं लिया गया है (नीचे उद्धृत)
  • यह एक जाल प्रतिनिधित्व हो सकता है (जिसके कारण यूबी का इस्तेमाल होता है)। 6.2.6.1/5:

कुछ ऑब्जेक्ट प्रस्तुतिकरणों को ऑब्जेक्ट प्रकार के मान का प्रतिनिधित्व नहीं करना पड़ता है।

अस्वाभाविक इनटी में जाल का प्रतिनिधित्व हो सकता है (उदाहरण के लिए अगर इसमें 15 परिशुद्धता बिट्स और 1 समता बिट है, तो a तक पहुँचने से समता दोष हो सकता है)।

6.2.4 / 6 का कहना है कि प्रारंभिक मान अनिश्चित है और 3.1 9.2 के नीचे की परिभाषा या तो एक अनिर्दिष्ट मूल्य या जाल प्रतिनिधित्व है।

आगे: पास्कोल क्यूक द्वारा इंगित C11 6.3.2.1/2 में:

यदि लावल्यू स्वत: भंडारण अवधि के एक ऑब्जेक्ट को निर्दिष्ट करता है जो कि रजिस्टर के साथ घोषित किया जा सकता था भंडारण वर्ग (इसे अपना पता कभी नहीं लिया गया था), और वह ऑब्जेक्ट अप्रयुक्त नहीं है (प्रारंभकर्ता के साथ घोषित नहीं किया गया है और इसका कोई असाइनमेंट उपयोग करने से पहले किया गया है), व्यवहार अनिर्धारित है।

इसमें चरित्र प्रकारों के लिए अपवाद नहीं है, इसलिए यह खंड पूर्ववर्ती चर्चा को खत्म करने के लिए प्रतीत होता है; प्रवेश करने के बाद x को तुरंत अपरिभाषित किया जाता है, भले ही कोई जाल अभ्यावेदन मौजूद न हो। ताकि 6.3.2.1/2 की आपत्ति अब लागू नहीं होती है, और हम उस प्रणाली पर हैं जो कि कोई जाल अभिसरण नहीं है? फिर मान एक अनिर्दिष्ट मूल्य है 3.19.3 में अनिर्दिष्ट मूल्य की परिभाषा थोड़ा अस्पष्ट है, हालांकि इसे द्वारा स्पष्ट किया गया है, जो निष्कर्ष निकाला है:

  • वर्णित शर्तों के तहत एक अनिर्बंधित मान दिखाई दे सकता है इसका मूल्य बदलें।
  • अनिश्चित मानों पर किए गए कोई भी ऑपरेशन परिणाम के रूप में एक अनिश्चित मान होगा।
  • अनिवार्य मानों पर उपयोग किए जाने पर लाइब्रेरी कार्य अपरिभाषित व्यवहार प्रदर्शित करेगा।
  • < Li> ये उत्तर सभी प्रकार के लिए उपयुक्त हैं, जिनके पास जाल का प्रतिनिधित्व नहीं है।

इस संकल्प के तहत, int a; & Amp; एक;

ध्यान दें कि अगर अनिश्चित मूल्य एक पुस्तकालय समारोह में नहीं दिया गया है, हम अभी भी हैं अनिर्दिष्ट व्यवहार के क्षेत्र में (अनिर्धारित व्यवहार नहीं) परिणाम अजीब हो सकता है, उदा। if (j! = J) foo (); फू को बुला सकता है, लेकिन राक्षसों को नाक गुहा में रहना चाहिए।


Comments

Popular posts from this blog

sqlite3 - UPDATE a table from the SELECT of another one -

c# - Showing a SelectedItem's Property -

javascript - Render HTML after each iteration in loop -