दिलचस्प पोस्ट
स्थान और हॅश लॉसट्रेटाजी बीटा में काम करना बंद कर दिया .16 कैसे एक ही सर्वर या अलग सर्वर से आ रहा है अगर एक अनुरोध की जांच करने के लिए? डेल्फी के लिए कौन से वेब अनुप्रयोग फ़्रेमवर्क की अनुशंसा की जाती है? कैसे कोड में jQuery परिवर्तन घटना ट्रिगर करने के लिए निर्माण का निर्माण क्या होता है? पोस्टग्रेएसक्यूएल – ग्रुप बाय क्लॉज में दिखाई देता है या किसी समस्त फ़ंक्शन में इस्तेमाल किया जाता है नए टैब में यूआरएल खोलें या जब भी संभव हो तो मौजूदा एक का पुन: उपयोग करें $ डायरेक्टिव परीक्षण में बनाम $ डाइजेस्ट लागू करें हम क्यों पीस स्क्रिप्ट में sys.setdefaultencoding ("utf-8") का उपयोग नहीं करना चाहिए? JFrame.dispose () बनाम System.exit () सुरुचिपूर्ण तरीके से दो तिथियों के भीतर यादृच्छिक तारीखों की सरणी उत्पन्न होती है जावास्क्रिप्ट स्ट्रिंग / पूर्णांक तुलना स्विफ्ट में दृश्य नियंत्रकों के बीच डेटा पास करना जावा रिएन्ट्रंटरेडड्राइटलेक्स – कैसे सुरक्षित रूप से लॉक लॉक प्राप्त करें? एनएफसी टैग्स पर सीरियल – वाकई अद्वितीय? cloneable?

क्या एक ^ ए या ए अपरिभाषित व्यवहार होता है यदि कोई प्रारंभ नहीं होता है?

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

#include <stdio.h> int main(void) { unsigned int a; printf("%u %u\n", a^a, aa); return 0; } 

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

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

Solutions Collecting From Web of "क्या एक ^ ए या ए अपरिभाषित व्यवहार होता है यदि कोई प्रारंभ नहीं होता है?"

सी 11 में:

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

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

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

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

इसके अलावा: पास्कोल क्यूक द्वारा इंगित के रूप में 6.3.16.2 सीएम में,

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

इसमें चरित्र प्रकारों के लिए कोई अपवाद नहीं है, इसलिए इस खंड में पूर्ववर्ती चर्चा को खत्म करना प्रतीत होता है; x का उपयोग करना तुरंत अनिर्धारित है, भले ही कोई जाल अभ्यावेदन मौजूद न हो। इस खंड को इटैनियम सीपीयू का समर्थन करने के लिए C11 में जोड़ा गया था, जिनके पास रजिस्टर के लिए वास्तव में एक जाल है।


जाल अभ्यावेदन के बिना सिस्टम: लेकिन क्या होगा अगर हम &x; ताकि 6.3.2.1/2 की आपत्ति अब लागू नहीं होती है, और हम उस प्रणाली पर हैं जो किसी जाल का प्रतिनिधित्व नहीं करता है? फिर मान अनिर्दिष्ट मूल्य है । 3.1 9 .3 में अनिर्दिष्ट मूल्य की परिभाषा थोड़ा अस्पष्ट है, हालांकि इसे डीआर 451 द्वारा स्पष्ट किया गया है, जो निष्कर्ष निकाला है:

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

इस संकल्प के तहत, int a; &a; int b = a - a; int a; &a; int b = a - a; b में अनिश्चित मूल्य अभी भी परिणाम है।

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

हां, यह अपरिभाषित व्यवहार है

सबसे पहले, किसी भी अप्रकाशित चर में "टूटी" (उर्फ "जाल") प्रतिनिधित्व हो सकता है। उस प्रतिनिधित्व तक पहुंचने का एक भी प्रयास अपरिभाषित व्यवहार को ट्रिगर करता है इसके अलावा, गैर-फँसने वाले प्रकारों (जैसे unsigned char ) की वस्तुओं को अभी भी विशेष प्लेटफॉर्म-आश्रित राज्यों (जैसे एनएटी – नॉट-ए-थिंग – इटेनियम पर) प्राप्त कर सकते हैं जो उनके "अनिश्चित मूल्य" के रूप में प्रकट हो सकते हैं।

दूसरे, एक अनिर्मीकृत वेरिएबल स्थिर मूल्य के लिए गारंटी नहीं है। उसी अनुक्रमित वैरिएबल के दो अनुक्रमिक एक्सेस पूरी तरह से अलग-अलग मान पढ़ सकते हैं, यही वजह है कि यहां तक ​​कि दोनों "सफल" (फंसाने के लिए) में पहुंचने के बावजूद, यह अभी भी गारंटी नहीं है कि a - a शून्य से मूल्यांकन होगा

यदि किसी ऑब्जेक्ट में स्वत: भंडारण की अवधि होती है और उसका पता नहीं लिया जाता है, तो उसे पढ़ने का प्रयास न करें अपरिभाषित व्यवहार। इस तरह के एक वस्तु का पता लेना और बाइट्स को पढ़ने के लिए "अहस्ताक्षरित चार" प्रकार के संकेतक का उपयोग करना, मानक के अनुसार "अहस्ताक्षरित चार" का मान देने के लिए मानक द्वारा गारंटी दी जाती है, लेकिन सभी कंपलर उस संबंध में मानक का पालन नहीं करते हैं । एआरएम जीसीसी 5.1, उदाहरण के लिए, दिए जाने पर:

  #include <stdint.h> #include <string.h> struct q { uint16_t x,y; }; volatile uint16_t zz; int32_t foo(uint32_t x, uint32_t y) { struct q temp1,temp2; temp1.x = 3; if (y & 1) temp1.y = zz; memmove(&temp2,&temp1,sizeof temp1); return temp2.y; } 

कोड उत्पन्न करेगा जो x वापस करेगा यदि y शून्य है, भले ही x 0-65535 की सीमा के बाहर हो। मानक स्पष्ट करता है कि अहस्ताक्षरित चरित्र अनिश्चित मूल्य की पढ़ता है, जो unsigned char की श्रेणी के भीतर एक मूल्य उत्पन्न करने के लिए गारंटी है, और memmove का व्यवहार परिभाषित वर्णों के अनुक्रम के समान होता है और लिखता है। इस प्रकार, temp2 के पास एक ऐसा मूल्य होना चाहिए, जिसे चरित्र लिखने के अनुक्रम के माध्यम से संग्रहीत किया जा सकता है, लेकिन जीसीसी एक असाइनमेंट के साथ मेमोज़ को प्रतिस्थापित करने का निर्णय ले रहा है और इस तथ्य को अनदेखा करता है कि कोड ने temp1 और temp2 का पता लिया।

किसी संकलक को एक प्रकार के वैरिएबल के संबंध में मजबूर करने के लिए मजबूर करने का एक साधन रखने के लिए, ऐसे मामलों में जहां ऐसा कोई भी मान समान रूप से स्वीकार्य होगा, लेकिन यह उपयोगी होगा, लेकिन मानक ऐसा करने का एक साफ साधन निर्दिष्ट नहीं करता है कुछ विशेष मूल्य को संग्रहीत करने के लिए जो काम करेगा, लेकिन अक्सर बिना धीमे गति से हो सकता है)। यहां तक ​​कि आपरेशनों को जो एक वैरिएबल को एक मान रखने के लिए तर्कसंगत रूप से बल देता है, जो प्रस्तुति योग्य होगा क्योंकि बिट्स के कुछ संयोजन सभी कंपाइलर पर काम करने के लिए भरोसा नहीं कर सकते। नतीजतन, ऐसे चर के बारे में उपयोगी कुछ भी गारंटी नहीं दी जा सकती है।