मानक आपके और आपके संकलक के बीच "अनुबंध" का एक प्रकार है जो आपके कार्यक्रमों के अर्थ को परिभाषित करता है। प्रोग्रामर के रूप में, हमारे पास अक्सर एक निश्चित मानसिक मॉडल होता है कि भाषा कैसे काम करती है, और यह मानसिक मॉडल अक्सर मानक के साथ बाधाओं पर होता है। (उदाहरण के लिए, सी प्रोग्रामर अक्सर एक पॉइंटर को मोटे तौर पर "एक पूर्णांक जो एक मेमोरी एड्रेस को दर्शाता है" के रूप में सोचते हैं, और इसलिए मान लेते हैं कि किसी भी अंकगणित / रूपांतरण / संकेत पर प्रदर्शन करने के लिए सुरक्षित है कि कोई एक पूर्णांक के साथ प्रदर्शन कर सकता है जो एक मेमोरी को दर्शाता है। पता। यह धारणा मानक से सहमत नहीं है, यह वास्तव में संकेत के साथ क्या कर सकता है पर बहुत सख्त प्रतिबंध लगाता है)
तो, अपने स्वयं के मानसिक मॉडल के बजाय मानक का पालन करने का क्या फायदा है?
सीधे शब्दों में कहें, यह मानक सही है, और आपका अपना मानसिक मॉडल गलत है। आपका मानसिक मॉडल आमतौर पर एक सरल दृष्टिकोण है कि सभी कंपाइलर ऑप्टिमाइज़ेशन अक्षम होने के साथ, सामान्य मामलों में, आपके सिस्टम पर चीजें कैसे काम करती हैं; संकलक विक्रेता आमतौर पर इसके अनुरूप प्रयास नहीं करते हैं, खासकर जब यह अनुकूलन की बात आती है। (यदि आप अनुबंध के अपने अंत तक नहीं रहते हैं, तो आप संकलक से किसी विशिष्ट व्यवहार की उम्मीद नहीं कर सकते हैं: कचरा, कचरा बाहर।)
लोग गैर-पोर्टेबल समाधानों को पसंद नहीं करते हैं, भले ही वे मेरे लिए काम करें।
यह कहना बेहतर होगा, "भले ही वे मेरे लिए काम करें।" जब तक आपका कंपाइलर विशेष रूप से दस्तावेज नहीं देता है कि एक दिया गया व्यवहार काम करेगा (वह है: जब तक आप एक समृद्ध मानक का उपयोग नहीं कर रहे हैं, मानक उचित प्लस कंपाइलर प्रलेखन से मिलकर), तो आप नहीं जानते कि यह वास्तव में काम करता है, या कि यह वास्तव में विश्वसनीय है। उदाहरण के लिए, हस्ताक्षरित पूर्णांक ओवरफ़्लो आमतौर पर कई प्रणालियों (इसलिए, INT_MAX+1
आमतौर पर INT_MIN
) पर रैपिंग के परिणामस्वरूप होता है - इसके अलावा, कंपाइलर "पता" को छोड़कर कि एक (सही) सी प्रोग्राम में पूर्णांक अंकगणितीय कभी भी ओवरफ्लो नहीं होता है, और अक्सर इसके आधार पर बहुत आश्चर्यजनक अनुकूलन करते हैं " ज्ञान"।