2012-08-30 39 views
5

C11 मानक से हवाला देते हुए:बारे सरणी subscripting ऑपरेटर

सरणी subsripting (§ 6.5.2.1)

सबस्क्रिप्ट ऑपरेटर [] की परिभाषा है कि E1[E2](*((E1)+(E2))) के समान है है।

मुझे पता है क्यों E1 आवश्यक आसपास कोष्ठक (वे C89 मानक में लापता थे) कर रहे हैं चाहते हैं, यानी जिसमें अभिव्यक्ति (*(E1+(E2)))(*((E1)+(E2))) से अलग हो सकता है?

+0

मेरा एकमात्र अनुमान है कि ई 2 का मूल्यांकन ई 1 से पहले किया जाता है। उत्तरार्द्ध प्राथमिकता नहीं देता है और कोष्ठक समान रूप से घोंसले होते हैं। कोई विचार क्यों नहीं। –

+8

मैंने उस रेखा, या मानक में किसी भी पंक्ति को नहीं लिखा, लेकिन मेरा ज्ञान यह है कि "ई 1" और "ई 2" अभिव्यक्ति के लिए हैं, और वे सिर्फ जोर देना चाहते थे कि ई 1 पूरी तरह से मूल्यांकन किया जाए, भले ही आप मूल रूप से " इसे कॉपी और पेस्ट करें "इसे विवरण में। –

+0

मैं पूरी तरह से @ क्रिस्टियनस्टीबर से सहमत हूं। एडिशन में आपको यह ध्यान रखना होगा कि '+' और '[] 'की अलग-अलग प्राथमिकताएं हैं, इसलिए यदि' ई 1 'एक अभिव्यक्ति है तो यह' +' के पीछे अलग-अलग बाध्य हो सकती है। –

उत्तर

9

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n841.htm के अनुसार, यह केवल स्पष्टता के लिए डाला गया है। दो अभिव्यक्ति सिंथेटिक रूप से समकक्ष हैं।

सार्वजनिक टिप्पणी संख्या पीसी UK0103
टिप्पणी 1.
श्रेणी: सम्पादकीय परिवर्तन/गैर-प्रामाणिक योगदान
समिति ड्राफ्ट उपधारा: 6.3.2.1
शीर्षक: सरणी subscripting उदाहरण
विस्तृत विवरण:

भ्रम से बचने के लिए "(*((E1)+(E2)))" द्वारा अनुच्छेद 2 को "(*(E1+(E2)))" को प्रतिस्थापित करना चाहिए। हां, मुझे पता है कि सिंटैक्टिक चार्ट इसे अस्पष्ट बनाता है, लेकिन अनुच्छेद 2 में वर्तमान शब्द बहुत भ्रमित है।