आम तौर पर जब एक switch
कथन का उपयोग, आप को परिभाषित नहीं कर सकते हैं और यौगिक बयान के स्थानीय चर को प्रारंभ,क्या यौगिक स्विच कथन में स्थानीय चर प्रारंभ होते हैं जब 'डिफ़ॉल्ट:' लेबल ब्रेसिज़ के बाहर रखा जाता है?
switch (a)
{
int b = 5; /* Initialization is skipped, no matter what a is */
case 1:
/* Do something */
break;
default:
/* Do something */
break;
}
हालांकि तरह, के बाद से switch
बयान for
या while
की तरह एक बयान है, वहाँ के खिलाफ कोई नियम नहीं है एक कंपाउंड स्टेटमेंट का उपयोग नहीं करते, look here for examples। लेकिन इसका मतलब यह होगा कि switch
कीवर्ड और उद्घाटन ब्रेस के बाद समापन कोष्ठक के बीच एक लेबल का उपयोग किया जा सकता है।
तो मेरी राय में, यह संभव हो सकता है और एक switch
बयान इस तरह उपयोग करने की अनुमति होगी:
switch (a)
default:
{
int b = 5; /* Is the initialization skipped when a != 1? */
/* Do something for the default case using 'b' */
break;
case 1: // if a == 1, then the initialization of b is skipped.
/* Do something */
break;
}
मेरा प्रश्न: प्रारंभ जरूरी इस मामले में किया जाता है (एक = 1!)? मानकों के बारे में मुझे क्या पता है, हां, यह होना चाहिए, लेकिन मैं इसे उपलब्ध दस्तावेजों में सीधे नहीं ढूंढ सकता। क्या कोई एक निर्णायक उत्तर प्रदान कर सकता है?
और इससे पहले कि मैं उस प्रभाव पर टिप्पणी प्राप्त करूं, हाँ, मुझे पता है कि यह वास्तविक दुनिया में प्रोग्राम करने का एक तरीका नहीं है। लेकिन, हमेशा के रूप में, मुझे भाषा विनिर्देश की सीमाओं में दिलचस्पी है। मैं में प्रोग्रामिंग टीम में ऐसी शैली कभी बर्दाश्त नहीं करता!
@ मैट नहीं, यह सिर्फ विचार है: कथन के अंत तक (आमतौर पर परिसर) तक समापन कोष्ठक के बाद 'स्विच' कथन में लेबल दिखाई दे सकते हैं, इसलिए 'डिफ़ॉल्ट:' ब्रेसिज़ के बाहर लेबल कानूनी IMHO होगा । उलझन में, हाँ, निश्चित रूप से! लेकिन कोई लापता ब्रेसिज़ नहीं है। –
तो क्या आप पूछ रहे हैं कि 'बी' वैध है या नहीं, यदि मामला 1' लिया गया है? यह वास्तव में 'goto foo के लिए अलग नहीं है; {int बी = 5; foo: ...} '। –
ठीक है, ठीक है कि यह निश्चित रूप से भ्रमित है ... – Mat