सभी उत्तरों और कुछ और शोधों को पढ़ने के बाद मुझे कुछ चीजें मिलती हैं।
Case statements are only 'labels'
सी में, विनिर्देश के अनुसार,
Ments6.8.1 लेबल किए गए विवरण:
labeled-statement:
identifier : statement
case constant-expression : statement
default : statement
C में ऐसा कोई क्लॉज नहीं है जो "लेबल डिक्लेरेशन" की अनुमति देता है। यह सिर्फ भाषा का हिस्सा नहीं है।
इसलिए
case 1: int x=10;
printf(" x is %d",x);
break;
यह संकलित नहीं करेगा , http://codepad.org/YiyLQTYw देखें । जीसीसी एक त्रुटि दे रहा है:
label can only be a part of statement and declaration is not a statement
यहाँ तक की
case 1: int x;
x=10;
printf(" x is %d",x);
break;
यह भी संकलन नहीं है , http://codepad.org/BXnRD3bu देखें । यहाँ मुझे भी वही त्रुटि मिल रही है।
C ++ में, विनिर्देश के अनुसार,
लेबल-घोषणा की अनुमति है, लेकिन लेबल-युक्तिकरण की अनुमति नहीं है।
Http://codepad.org/ZmQ0IyDG देखें ।
ऐसी स्थिति का समाधान दो है
या तो {} का उपयोग करके नए दायरे का उपयोग करें
case 1:
{
int x=10;
printf(" x is %d", x);
}
break;
या लेबल के साथ डमी स्टेटमेंट का उपयोग करें
case 1: ;
int x=10;
printf(" x is %d",x);
break;
स्विच से पहले वेरिएबल को डिक्लेयर करें () और केस स्टेटमेंट में अलग-अलग वैल्यू के साथ इनिशियलाइज़ करें अगर यह आपकी आवश्यकता को पूरा करता है
main()
{
int x; // Declare before
switch(a)
{
case 1: x=10;
break;
case 2: x=20;
break;
}
}
स्विच स्टेटमेंट के साथ कुछ और बातें
स्विच में कभी कोई स्टेटमेंट न लिखें जो किसी भी लेबल का हिस्सा नहीं है, क्योंकि वे कभी निष्पादित नहीं होंगे:
switch(a)
{
printf("This will never print"); // This will never executed
case 1:
printf(" 1");
break;
default:
break;
}
Http://codepad.org/PA1quYX3 देखें ।