C pointer arithmetic -
इस कोड को देखते हुए:
int * p, * q; P = (int *) 1000; Q = (int *) 2000;
क्या q - p
है और कैसे?
यह मानक के अनुसार वास्तव में अपरिभाषित है पॉइंटर अंकगणित काम करने की गारंटी नहीं है जब तक कि पॉइंटर्स दोनों या तो किसी तत्व को इंगित कर रहे हों, या उसी सरणी से परे।
मानक का प्रासंगिक अनुभाग 6.5.6: 9 (एन 1, 362 का मसौदा C1x लेकिन यह c99 के बाद से नहीं बदला गया है) जो बताता है:
जब दो बिंदुओं को घटाया जाता है, दोनों ही सरणी वस्तु के तत्वों को इंगित करेंगे, या एक सरणी वस्तु के अंतिम तत्व ; परिणामस्वरूप दो सरणी तत्वों के सब्स्क्रिप्शन में अंतर होता है।
यदि आपके int
डेटाटाइप 4 बाइट्स हैं, तो आपको सबसे ज्यादा 250 मिलेगा लेकिन कोई गारंटी नहीं है । अपरिभाषित व्यवहार (कार्यान्वयन-परिभाषित व्यवहार के विपरीत) का मतलब है कि, अपरिभाषित।
एक पुनश्चर्या पाठ्यक्रम:
- परिभाषित व्यवहार मानक द्वारा अनिवार्य है, जो कुछ भी हो सकता है, अंतरिक्ष-समय के एक बड़े हिस्से के कुल विनाश सहित, कुछ भी हो सकता है। । कार्यान्वयन को यह अनुरूप होना चाहिए।
- कार्यान्वयन-परिभाषित व्यवहार को कार्यान्वयन तक छोड़ दिया गया है लेकिन इसे व्यवहार को स्पष्ट रूप से दस्तावेज करना चाहिए इसका उपयोग करें यदि आपको पोर्टेबिलिटी के बारे में बहुत अधिक परवाह नहीं है।
- अपरिभाषित व्यवहार का मतलब है कि कुछ भी हो सकता है। कभी ऐसा मत करो!
Comments
Post a Comment