यह आपके द्वारा उपयोग किए जाने वाले चर के लिए नया दायरा बनाता है। चर के दायरे कभी-कभी मुश्किल हो सकते हैं। उदाहरण के लिए आपके द्वारा पोस्ट किए गए कोड में;
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
i = 1; // Error: The name 'i' doesn't exist in the current context
break;
}
त्रुटि के रूप में में case(b)
चर a
क्षेत्र से बाहर पहुँचा जा सकता है यहाँ समझ में आता है। अब दूसरी तरफ,
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
int i = 1; // Error: A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
break;
}
ऊपर दो त्रुटियां एक दूसरे के विरोधाभासी दिखती हैं। इस के आसपास पाने के लिए आप, दोनों मामले बयान में अलग-अलग दायरे को परिभाषित करना चाहिए
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
{
int i = 1; // No error
}
break;
}
एरिक Lippert एक बहुत अच्छा link to his blog साझा मामले बयान में चर स्कोप समझाने के लिए। आपको इसे देखना चाहिए।
वहाँ सिवाय इसके कि मामला एक में निर्धारित वेरिएबल कि ब्लॉक में ही दिखाई देते हैं कोई अंतर नहीं है। –
वास्तव में कुछ भी नहीं।यह सिर्फ इतना है कि कभी-कभी आप उस मामले को तैयार करने वाली वस्तुओं को बनाना और उपयोग करना चाहते हैं। ब्रैकेट के बिना आप परिभाषित करते हैं कि आपके पास व्यापक क्षेत्र है। – Robinson
आपने जो नहीं पूछा, लेकिन मुझे पढ़ने के लिए कठिन 'केस' ब्लॉक मिलते हैं। अगर मुझे स्कोपिंग या किसी अन्य जटिलता की आवश्यकता है, तो इसे एक नई विधि मिलती है। –