2010-10-13 23 views
8

क्या निम्न कोड मान्य सी ++ है?क्या यह कोड मान्य सी ++ है?

const int var = 10; 
{ 
    int var[var]; // why doesn't this give any error ? 
} 

नोट: कोड मेरे जी ++ कंपाइलर पर संकलित करता है।

+0

ऐसा क्यों है * नहीं * मान्य हो सकता है? –

उत्तर

5

हाँ कोड मान्य सी ++ है। गैर-स्थानीय var स्थानीय var की घोषणा के बिंदु तक दिखाई देता है।

तो int var[var] 10 पूर्णांक की स्थानीय सरणी को परिभाषित करता है।

19

जैसा है? नहीं। अगर यह किसी समारोह के शरीर में था? हाँ।

पहली पंक्ति 10 के मूल्य के साथ var नामक पूर्णांक निरंतर घोषित करती है।

ब्रेसिज़ एक नया ब्लॉक शुरू करता है। उस ब्लॉक के भीतर, var नामक एक नया वैरिएबल घोषित किया गया है, जो कि int की एक सरणी है जो पूर्णांक var (10) के रूप में घोषित पूर्णांक स्थिरता के मान के बराबर आकार के बराबर है।

महत्वपूर्ण यह है कि var दूसरा var नामित चर पूरी तरह से घोषित किया जाता है के बाद जब तक पहले चर को संदर्भित करता है। दूसरी घोषणा और समापन ब्रेस के बाद अर्धविराम के बीच, var दूसरे चर को संदर्भित करता है। (यदि वहाँ दूसरा चर के लिए एक प्रारंभकर्ता था, var तुरंत प्रारंभकर्ता से पहले दूसरी चर का उल्लेख करने के लिए शुरू होता है।)

+0

लॉल - "फ़ंक्शन के शरीर में" के लिए +1 बिट: पी –

+0

@ बिली: ठीक है, मुझे लगता है कि यह कुछ हद तक महत्वपूर्ण है; यदि यह कोड नेमस्पेस या क्लास स्कोप पर था, तो आपको ब्लॉक को नामस्थान या कक्षा या फ़ंक्शन या कुछ बनाना होगा ... –

+0

@ जेम्स मैकनेलिस: नाम छिपाना, या मेरी सबसे नफरत वाली सुविधाओं में से एक। आप समझने की कोशिश कर रहे घंटों का समय व्यतीत कर सकते हैं कि क्या गलत है ... –

1

हाँ कोड मान्य सी ++ है यह स्कोप की एक अवधारणा है: छिपाई जा रही है नाम

const int var = 10; 
    { 
    int var[var]; // why doesn't this give any error ? 
    } 

मुझे लगता है कि इस लिंक सी में अपने संदेह

को साफ करता है ++:

http://msdn.microsoft.com/en-US/library/9a9h7328%28v=VS.80%29.aspx

सी में:

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fzexscope_c.htm

यू गहरा ज्ञान चाहते हैं इस पर: इस लिंक के लिए जाओ, यहाँ जानकारी गतिशील scoping

http://en.wikipedia.org/wiki/Scope_%28programming%29

बनाम लेकिन अपने कोड में शाब्दिक बारे में है: "स्कोप ::" var की दृश्यता। यह स्थानीय और गैर-स्थानीय चर की तरह अलग है। ब्रेसिज़ के अंदर {x = 1; } स्थानीय चर। जहां यहां {y = 1; {x = 1;}}, यहां यह अलग है।

उपयोगी लिंक

http://msdn.microsoft.com/en-us/library/b7kfh662%28VS.80%29.aspx

http://www.awitness.org/delphi_pascal_tutorial/c++_delphi/c++_scope_variables.html

+0

@ बीई: मुझे लगता है कि दिया गया पहला 3 लिंक स्पष्ट है। इस उदाहरण के बारे में> रैमिंग की आवश्यकता नहीं है –

संबंधित मुद्दे